From fadcb0697b85ea39ad77880be33f75c065147d92 Mon Sep 17 00:00:00 2001 From: David Cardoza Date: Mon, 7 Aug 2023 19:28:52 -0700 Subject: [PATCH 001/315] Rename Card-Rev-Share-for-Approved-Partners.md to Card-Revenue-Share-for-ExpensifyApproved!-Partners.md --- ...s.md => Card-Revenue-Share-for-ExpensifyApproved!-Partners.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/articles/other/{Card-Rev-Share-for-Approved-Partners.md => Card-Revenue-Share-for-ExpensifyApproved!-Partners.md} (100%) diff --git a/docs/articles/other/Card-Rev-Share-for-Approved-Partners.md b/docs/articles/other/Card-Revenue-Share-for-ExpensifyApproved!-Partners.md similarity index 100% rename from docs/articles/other/Card-Rev-Share-for-Approved-Partners.md rename to docs/articles/other/Card-Revenue-Share-for-ExpensifyApproved!-Partners.md From 89c2ff64b98602abe83c2fa992c7978f27171cdb Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Thu, 17 Aug 2023 20:52:11 -0600 Subject: [PATCH 002/315] Add skeleton application methods --- src/CONST.js | 4 ++ src/libs/Middleware/SaveResponseInOnyx.js | 50 ++++++++++++++--------- src/libs/actions/App.js | 32 ++++++++++++++- src/libs/actions/OnyxUpdates.js | 10 ++++- src/libs/actions/User.js | 21 +++++++--- 5 files changed, 88 insertions(+), 29 deletions(-) diff --git a/src/CONST.js b/src/CONST.js index 6920f8fbcc64..dc31da3f37b4 100755 --- a/src/CONST.js +++ b/src/CONST.js @@ -2552,6 +2552,10 @@ const CONST = { NAVIGATE: 'NAVIGATE', }, }, + ONYX_UPDATE_TYPES: { + HTTPS: 'https', + PUSHER: 'pusher', + }, }; export default CONST; diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index b347e45ab61c..895a94f5f9fb 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -16,29 +16,39 @@ function SaveResponseInOnyx(response, request) { } // Save the update IDs to Onyx so they can be used to fetch incremental updates if the client gets out of sync from the server - OnyxUpdates.saveUpdateIDs(Number(responseData.lastUpdateID || 0), Number(responseData.previousUpdateID || 0)); + OnyxUpdates.saveUpdateIDs( + { + updateType: CONST.ONYX_UPDATE_TYPES.HTTPS, + data: { + request, + response, + }, + }, + Number(responseData.lastUpdateID || 0), + Number(responseData.previousUpdateID || 0), + ); - // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in - // the UI. See https://github.com/Expensify/App/issues/12775 for more info. - const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; + // // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in + // // the UI. See https://github.com/Expensify/App/issues/12775 for more info. + // const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; - // First apply any onyx data updates that are being sent back from the API. We wait for this to complete and then - // apply successData or failureData. This ensures that we do not update any pending, loading, or other UI states contained - // in successData/failureData until after the component has received and API data. - const onyxDataUpdatePromise = responseData.onyxData ? updateHandler(responseData.onyxData) : Promise.resolve(); + // // First apply any onyx data updates that are being sent back from the API. We wait for this to complete and then + // // apply successData or failureData. This ensures that we do not update any pending, loading, or other UI states contained + // // in successData/failureData until after the component has received and API data. + // const onyxDataUpdatePromise = responseData.onyxData ? updateHandler(responseData.onyxData) : Promise.resolve(); - return onyxDataUpdatePromise - .then(() => { - // Handle the request's success/failure data (client-side data) - if (responseData.jsonCode === 200 && request.successData) { - return updateHandler(request.successData); - } - if (responseData.jsonCode !== 200 && request.failureData) { - return updateHandler(request.failureData); - } - return Promise.resolve(); - }) - .then(() => responseData); + // return onyxDataUpdatePromise + // .then(() => { + // // Handle the request's success/failure data (client-side data) + // if (responseData.jsonCode === 200 && request.successData) { + // return updateHandler(request.successData); + // } + // if (responseData.jsonCode !== 200 && request.failureData) { + // return updateHandler(request.failureData); + // } + // return Promise.resolve(); + // }) + // .then(() => responseData); }); } diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index d82c1e78fe0c..b33a90ab3fc0 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -234,6 +234,36 @@ function getMissingOnyxUpdates(updateIDFrom = 0, updateIDTo = 0) { // The next 40ish lines of code are used for detecting when there is a gap of OnyxUpdates between what was last applied to the client and the updates the server has. // When a gap is detected, the missing updates are fetched from the API. +/** + * @param {Object} data + * @param {Object} data.request + * @param {Object} data.response + */ +function applyHTTPSOnyxUpdates({request, response}) {} + +/** + * @param {Object} data + * @param {Object} data.onyxData + */ +function applyPusherOnyxUpdates({onyxData}) {} + +/** + * @param {Object[]} updateParams + * @param {String} updateParams.type + * @param {Object} updateParams.data + * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' + * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' + * @param {Object} [updateParams.data.onyxData] Exists if updateParams.type === 'pusher' + */ +function applyOnyxUpdates({type, data}) { + if (type === CONST.ONYX_UPDATE_TYPES.HTTPS) { + applyHTTPSOnyxUpdates(data); + } + if (type === CONST.ONYX_UPDATE_TYPES.PUSHER) { + applyPusherOnyxUpdates(data); + } +} + // These key needs to be separate from ONYXKEYS.ONYX_UPDATES_FROM_SERVER so that it can be updated without triggering the callback when the server IDs are updated let lastUpdateIDAppliedToClient = 0; Onyx.connect({ @@ -248,7 +278,7 @@ Onyx.connect({ return; } - const {lastUpdateIDFromServer, previousUpdateIDFromServer} = val; + const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; console.debug('[OnyxUpdates] Received lastUpdateID from server', lastUpdateIDFromServer); console.debug('[OnyxUpdates] Received previousUpdateID from server', previousUpdateIDFromServer); console.debug('[OnyxUpdates] Last update ID applied to the client', lastUpdateIDAppliedToClient); diff --git a/src/libs/actions/OnyxUpdates.js b/src/libs/actions/OnyxUpdates.js index e582016f0109..96cee3a228bc 100644 --- a/src/libs/actions/OnyxUpdates.js +++ b/src/libs/actions/OnyxUpdates.js @@ -2,11 +2,16 @@ import Onyx from 'react-native-onyx'; import ONYXKEYS from '../../ONYXKEYS'; /** - * + * @param {Object[]} updateParams + * @param {String} updateParams.type + * @param {Object} updateParams.data + * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' + * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' + * @param {Object} [updateParams.data.onyxData] Exists if updateParams.type === 'pusher' * @param {Number} [lastUpdateID] * @param {Number} [previousUpdateID] */ -function saveUpdateIDs(lastUpdateID = 0, previousUpdateID = 0) { +function saveUpdateIDs(updateParams, lastUpdateID = 0, previousUpdateID = 0) { // Return early if there were no updateIDs if (!lastUpdateID) { return; @@ -15,6 +20,7 @@ function saveUpdateIDs(lastUpdateID = 0, previousUpdateID = 0) { Onyx.merge(ONYXKEYS.ONYX_UPDATES_FROM_SERVER, { lastUpdateIDFromServer: lastUpdateID, previousUpdateIDFromServer: previousUpdateID, + updateParams, }); } diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index 9648b77220ac..92c0e805017d 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -552,13 +552,22 @@ function subscribeToUserEvents() { // lastUpdateID, previousUpdateID and updates if (_.isArray(pushJSON)) { updates = pushJSON; - } else { - updates = pushJSON.updates; - OnyxUpdates.saveUpdateIDs(Number(pushJSON.lastUpdateID || 0), Number(pushJSON.previousUpdateID || 0)); + _.each(updates, (multipleEvent) => { + PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data); + }); + return; } - _.each(updates, (multipleEvent) => { - PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data); - }); + + OnyxUpdates.saveUpdateIDs( + { + updateType: CONST.ONYX_UPDATE_TYPES.PUSHER, + data: { + onyxUpdates: pushJSON.updates, + }, + }, + Number(pushJSON.lastUpdateID || 0), + Number(pushJSON.previousUpdateID || 0), + ); }); // Handles Onyx updates coming from Pusher through the mega multipleEvents. From 424f9e9dc2cff25644a929dbaed88bf63397442f Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Thu, 17 Aug 2023 21:07:18 -0600 Subject: [PATCH 003/315] Build update application methods --- src/libs/Middleware/SaveResponseInOnyx.js | 26 +------------ src/libs/actions/App.js | 45 ++++++++++++++++++++--- src/libs/actions/OnyxUpdates.js | 4 +- src/libs/actions/User.js | 2 +- 4 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index 895a94f5f9fb..695b050610e6 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -1,6 +1,4 @@ -import Onyx from 'react-native-onyx'; import CONST from '../../CONST'; -import * as QueuedOnyxUpdates from '../actions/QueuedOnyxUpdates'; import * as OnyxUpdates from '../actions/OnyxUpdates'; /** @@ -21,34 +19,14 @@ function SaveResponseInOnyx(response, request) { updateType: CONST.ONYX_UPDATE_TYPES.HTTPS, data: { request, - response, + responseData, }, }, Number(responseData.lastUpdateID || 0), Number(responseData.previousUpdateID || 0), ); - // // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in - // // the UI. See https://github.com/Expensify/App/issues/12775 for more info. - // const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; - - // // First apply any onyx data updates that are being sent back from the API. We wait for this to complete and then - // // apply successData or failureData. This ensures that we do not update any pending, loading, or other UI states contained - // // in successData/failureData until after the component has received and API data. - // const onyxDataUpdatePromise = responseData.onyxData ? updateHandler(responseData.onyxData) : Promise.resolve(); - - // return onyxDataUpdatePromise - // .then(() => { - // // Handle the request's success/failure data (client-side data) - // if (responseData.jsonCode === 200 && request.successData) { - // return updateHandler(request.successData); - // } - // if (responseData.jsonCode !== 200 && request.failureData) { - // return updateHandler(request.failureData); - // } - // return Promise.resolve(); - // }) - // .then(() => responseData); + return responseData; }); } diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index b33a90ab3fc0..c4114e05d100 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -19,6 +19,8 @@ import * as ReportActionsUtils from '../ReportActionsUtils'; import Timing from './Timing'; import * as Browser from '../Browser'; import * as SequentialQueue from '../Network/SequentialQueue'; +import PusherUtils from '../PusherUtils'; +import * as QueuedOnyxUpdates from './QueuedOnyxUpdates'; let currentUserAccountID; let currentUserEmail; @@ -237,15 +239,41 @@ function getMissingOnyxUpdates(updateIDFrom = 0, updateIDTo = 0) { /** * @param {Object} data * @param {Object} data.request - * @param {Object} data.response + * @param {Object} data.responseData */ -function applyHTTPSOnyxUpdates({request, response}) {} +function applyHTTPSOnyxUpdates({request, responseData}) { + // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in + // the UI. See https://github.com/Expensify/App/issues/12775 for more info. + const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; + + // First apply any onyx data updates that are being sent back from the API. We wait for this to complete and then + // apply successData or failureData. This ensures that we do not update any pending, loading, or other UI states contained + // in successData/failureData until after the component has received and API data. + const onyxDataUpdatePromise = responseData.onyxData ? updateHandler(responseData.onyxData) : Promise.resolve(); + + onyxDataUpdatePromise + .then(() => { + // Handle the request's success/failure data (client-side data) + if (responseData.jsonCode === 200 && request.successData) { + return updateHandler(request.successData); + } + if (responseData.jsonCode !== 200 && request.failureData) { + return updateHandler(request.failureData); + } + return Promise.resolve(); + }) + .then(() => responseData); +} /** * @param {Object} data - * @param {Object} data.onyxData + * @param {Object} data.multipleEvents */ -function applyPusherOnyxUpdates({onyxData}) {} +function applyPusherOnyxUpdates({multipleEvents}) { + _.each(multipleEvents, (multipleEvent) => { + PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data); + }); +} /** * @param {Object[]} updateParams @@ -253,7 +281,7 @@ function applyPusherOnyxUpdates({onyxData}) {} * @param {Object} updateParams.data * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' - * @param {Object} [updateParams.data.onyxData] Exists if updateParams.type === 'pusher' + * @param {Object} [updateParams.data.multipleEvents] Exists if updateParams.type === 'pusher' */ function applyOnyxUpdates({type, data}) { if (type === CONST.ONYX_UPDATE_TYPES.HTTPS) { @@ -293,7 +321,12 @@ Onyx.connect({ lastUpdateIDAppliedToClient, }); SequentialQueue.pause(); - getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(SequentialQueue.unpause); + getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(() => { + applyOnyxUpdates(updateParams); + SequentialQueue.unpause(); + }); + } else { + applyOnyxUpdates(updateParams); } if (lastUpdateIDFromServer > lastUpdateIDAppliedToClient) { diff --git a/src/libs/actions/OnyxUpdates.js b/src/libs/actions/OnyxUpdates.js index 96cee3a228bc..6e8dffc1b047 100644 --- a/src/libs/actions/OnyxUpdates.js +++ b/src/libs/actions/OnyxUpdates.js @@ -6,8 +6,8 @@ import ONYXKEYS from '../../ONYXKEYS'; * @param {String} updateParams.type * @param {Object} updateParams.data * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' - * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' - * @param {Object} [updateParams.data.onyxData] Exists if updateParams.type === 'pusher' + * @param {Object} [updateParams.data.responseData] Exists if updateParams.type === 'https' + * @param {Object} [updateParams.data.multipleEvents] Exists if updateParams.type === 'pusher' * @param {Number} [lastUpdateID] * @param {Number} [previousUpdateID] */ diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index 92c0e805017d..30d5af52decd 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -562,7 +562,7 @@ function subscribeToUserEvents() { { updateType: CONST.ONYX_UPDATE_TYPES.PUSHER, data: { - onyxUpdates: pushJSON.updates, + multipleEvents: pushJSON.updates, }, }, Number(pushJSON.lastUpdateID || 0), From 59fd99f7f57bcecdde9968b03b381168c7d36cd9 Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Thu, 17 Aug 2023 21:32:29 -0600 Subject: [PATCH 004/315] Use a promise to know when updates are done --- src/libs/actions/App.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index c4114e05d100..3ae191390014 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -240,6 +240,7 @@ function getMissingOnyxUpdates(updateIDFrom = 0, updateIDTo = 0) { * @param {Object} data * @param {Object} data.request * @param {Object} data.responseData + * @returns {Promise} */ function applyHTTPSOnyxUpdates({request, responseData}) { // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in @@ -251,7 +252,7 @@ function applyHTTPSOnyxUpdates({request, responseData}) { // in successData/failureData until after the component has received and API data. const onyxDataUpdatePromise = responseData.onyxData ? updateHandler(responseData.onyxData) : Promise.resolve(); - onyxDataUpdatePromise + return onyxDataUpdatePromise .then(() => { // Handle the request's success/failure data (client-side data) if (responseData.jsonCode === 200 && request.successData) { @@ -270,6 +271,7 @@ function applyHTTPSOnyxUpdates({request, responseData}) { * @param {Object} data.multipleEvents */ function applyPusherOnyxUpdates({multipleEvents}) { + console.log('timxxx', 1, multipleEvents); _.each(multipleEvents, (multipleEvent) => { PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data); }); @@ -282,13 +284,15 @@ function applyPusherOnyxUpdates({multipleEvents}) { * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' * @param {Object} [updateParams.data.multipleEvents] Exists if updateParams.type === 'pusher' + * @returns {Promise} */ function applyOnyxUpdates({type, data}) { if (type === CONST.ONYX_UPDATE_TYPES.HTTPS) { - applyHTTPSOnyxUpdates(data); + return applyHTTPSOnyxUpdates(data); } if (type === CONST.ONYX_UPDATE_TYPES.PUSHER) { applyPusherOnyxUpdates(data); + return new Promise().resolve(); } } @@ -322,8 +326,7 @@ Onyx.connect({ }); SequentialQueue.pause(); getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(() => { - applyOnyxUpdates(updateParams); - SequentialQueue.unpause(); + applyOnyxUpdates(updateParams).then(SequentialQueue.unpause); }); } else { applyOnyxUpdates(updateParams); From ea1ebe33913ea621f75a85d407354bc0cbe15d34 Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Thu, 17 Aug 2023 21:48:20 -0600 Subject: [PATCH 005/315] Remove debug --- src/libs/actions/App.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index 3ae191390014..a0e4289ddb11 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -271,7 +271,6 @@ function applyHTTPSOnyxUpdates({request, responseData}) { * @param {Object} data.multipleEvents */ function applyPusherOnyxUpdates({multipleEvents}) { - console.log('timxxx', 1, multipleEvents); _.each(multipleEvents, (multipleEvent) => { PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data); }); From b9ecfc78f2497c8c10abfc0a25a11a83134e48bb Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Sat, 19 Aug 2023 13:31:10 -0600 Subject: [PATCH 006/315] Refactor the location of code --- src/libs/actions/App.js | 109 +---------------------- src/libs/actions/OnyxUpdatesManager.js | 116 +++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 108 deletions(-) create mode 100644 src/libs/actions/OnyxUpdatesManager.js diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index 098e99063fc7..56a313e81c0b 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -18,9 +18,6 @@ import * as Session from './Session'; import * as ReportActionsUtils from '../ReportActionsUtils'; import Timing from './Timing'; import * as Browser from '../Browser'; -import * as SequentialQueue from '../Network/SequentialQueue'; -import PusherUtils from '../PusherUtils'; -import * as QueuedOnyxUpdates from './QueuedOnyxUpdates'; let currentUserAccountID; let currentUserEmail; @@ -233,111 +230,6 @@ function getMissingOnyxUpdates(updateIDFrom = 0, updateIDTo = 0) { ); } -// The next 40ish lines of code are used for detecting when there is a gap of OnyxUpdates between what was last applied to the client and the updates the server has. -// When a gap is detected, the missing updates are fetched from the API. - -/** - * @param {Object} data - * @param {Object} data.request - * @param {Object} data.responseData - * @returns {Promise} - */ -function applyHTTPSOnyxUpdates({request, responseData}) { - // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in - // the UI. See https://github.com/Expensify/App/issues/12775 for more info. - const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; - - // First apply any onyx data updates that are being sent back from the API. We wait for this to complete and then - // apply successData or failureData. This ensures that we do not update any pending, loading, or other UI states contained - // in successData/failureData until after the component has received and API data. - const onyxDataUpdatePromise = responseData.onyxData ? updateHandler(responseData.onyxData) : Promise.resolve(); - - return onyxDataUpdatePromise - .then(() => { - // Handle the request's success/failure data (client-side data) - if (responseData.jsonCode === 200 && request.successData) { - return updateHandler(request.successData); - } - if (responseData.jsonCode !== 200 && request.failureData) { - return updateHandler(request.failureData); - } - return Promise.resolve(); - }) - .then(() => responseData); -} - -/** - * @param {Object} data - * @param {Object} data.multipleEvents - */ -function applyPusherOnyxUpdates({multipleEvents}) { - _.each(multipleEvents, (multipleEvent) => { - PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data); - }); -} - -/** - * @param {Object[]} updateParams - * @param {String} updateParams.type - * @param {Object} updateParams.data - * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' - * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' - * @param {Object} [updateParams.data.multipleEvents] Exists if updateParams.type === 'pusher' - * @returns {Promise} - */ -function applyOnyxUpdates({type, data}) { - if (type === CONST.ONYX_UPDATE_TYPES.HTTPS) { - return applyHTTPSOnyxUpdates(data); - } - if (type === CONST.ONYX_UPDATE_TYPES.PUSHER) { - applyPusherOnyxUpdates(data); - return new Promise().resolve(); - } -} - -// These key needs to be separate from ONYXKEYS.ONYX_UPDATES_FROM_SERVER so that it can be updated without triggering the callback when the server IDs are updated -let lastUpdateIDAppliedToClient = 0; -Onyx.connect({ - key: ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, - callback: (val) => (lastUpdateIDAppliedToClient = val), -}); - -Onyx.connect({ - key: ONYXKEYS.ONYX_UPDATES_FROM_SERVER, - callback: (val) => { - if (!val) { - return; - } - - const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; - console.debug('[OnyxUpdates] Received lastUpdateID from server', lastUpdateIDFromServer); - console.debug('[OnyxUpdates] Received previousUpdateID from server', previousUpdateIDFromServer); - console.debug('[OnyxUpdates] Last update ID applied to the client', lastUpdateIDAppliedToClient); - - // If the previous update from the server does not match the last update the client got, then the client is missing some updates. - // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. - if (lastUpdateIDAppliedToClient && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { - console.debug('[OnyxUpdates] Gap detected in update IDs so fetching incremental updates'); - Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { - lastUpdateIDFromServer, - previousUpdateIDFromServer, - lastUpdateIDAppliedToClient, - }); - SequentialQueue.pause(); - getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(() => { - applyOnyxUpdates(updateParams).then(SequentialQueue.unpause); - }); - } else { - applyOnyxUpdates(updateParams); - } - - if (lastUpdateIDFromServer > lastUpdateIDAppliedToClient) { - // Update this value so that it matches what was just received from the server - Onyx.merge(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, lastUpdateIDFromServer || 0); - } - }, -}); - /** * This promise is used so that deeplink component know when a transition is end. * This is necessary because we want to begin deeplink redirection after the transition is end. @@ -542,4 +434,5 @@ export { beginDeepLinkRedirect, beginDeepLinkRedirectAfterTransition, createWorkspaceAndNavigateToIt, + getMissingOnyxUpdates, }; diff --git a/src/libs/actions/OnyxUpdatesManager.js b/src/libs/actions/OnyxUpdatesManager.js new file mode 100644 index 000000000000..cdfa610cd146 --- /dev/null +++ b/src/libs/actions/OnyxUpdatesManager.js @@ -0,0 +1,116 @@ +import _ from 'underscore'; +import Onyx from 'react-native-onyx'; +import ONYXKEYS from '../../ONYXKEYS'; +import CONST from '../../CONST'; +import Log from '../Log'; +import * as SequentialQueue from '../Network/SequentialQueue'; +import PusherUtils from '../PusherUtils'; +import * as QueuedOnyxUpdates from './QueuedOnyxUpdates'; +import * as App from './App'; + +// The next 40ish lines of code are used for detecting when there is a gap of OnyxUpdates between what was last applied to the client and the updates the server has. +// When a gap is detected, the missing updates are fetched from the API. + +/** + * @param {Object} data + * @param {Object} data.request + * @param {Object} data.responseData + * @returns {Promise} + */ +function applyHTTPSOnyxUpdates({request, responseData}) { + // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in + // the UI. See https://github.com/Expensify/App/issues/12775 for more info. + const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; + + // First apply any onyx data updates that are being sent back from the API. We wait for this to complete and then + // apply successData or failureData. This ensures that we do not update any pending, loading, or other UI states contained + // in successData/failureData until after the component has received and API data. + const onyxDataUpdatePromise = responseData.onyxData ? updateHandler(responseData.onyxData) : Promise.resolve(); + + return onyxDataUpdatePromise + .then(() => { + // Handle the request's success/failure data (client-side data) + if (responseData.jsonCode === 200 && request.successData) { + return updateHandler(request.successData); + } + if (responseData.jsonCode !== 200 && request.failureData) { + return updateHandler(request.failureData); + } + return Promise.resolve(); + }) + .then(() => responseData); +} + +/** + * @param {Object} data + * @param {Object} data.multipleEvents + */ +function applyPusherOnyxUpdates({multipleEvents}) { + _.each(multipleEvents, (multipleEvent) => { + PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data); + }); +} + +/** + * @param {Object[]} updateParams + * @param {String} updateParams.type + * @param {Object} updateParams.data + * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' + * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' + * @param {Object} [updateParams.data.multipleEvents] Exists if updateParams.type === 'pusher' + * @returns {Promise} + */ +function applyOnyxUpdates({type, data}) { + if (type === CONST.ONYX_UPDATE_TYPES.HTTPS) { + return applyHTTPSOnyxUpdates(data); + } + if (type === CONST.ONYX_UPDATE_TYPES.PUSHER) { + applyPusherOnyxUpdates(data); + return new Promise().resolve(); + } +} + +// This key needs to be separate from ONYXKEYS.ONYX_UPDATES_FROM_SERVER so that it can be updated without triggering the callback when the server IDs are updated +let lastUpdateIDAppliedToClient = 0; +Onyx.connect({ + key: ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, + callback: (val) => (lastUpdateIDAppliedToClient = val), +}); + +Onyx.connect({ + key: ONYXKEYS.ONYX_UPDATES_FROM_SERVER, + callback: (val) => { + if (!val) { + return; + } + + const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; + console.debug('[OnyxUpdates] Received lastUpdateID from server', lastUpdateIDFromServer); + console.debug('[OnyxUpdates] Received previousUpdateID from server', previousUpdateIDFromServer); + console.debug('[OnyxUpdates] Last update ID applied to the client', lastUpdateIDAppliedToClient); + + // If the previous update from the server does not match the last update the client got, then the client is missing some updates. + // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. + if (lastUpdateIDAppliedToClient && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { + console.debug('[OnyxUpdates] Gap detected in update IDs so fetching incremental updates'); + Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { + lastUpdateIDFromServer, + previousUpdateIDFromServer, + lastUpdateIDAppliedToClient, + }); + + SequentialQueue.pause(); + + App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(() => { + applyOnyxUpdates(updateParams).then(SequentialQueue.unpause); + }); + } else { + applyOnyxUpdates(updateParams); + } + + if (lastUpdateIDFromServer > lastUpdateIDAppliedToClient) { + // Update this value so that it matches what was just received from the server + Onyx.merge(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, lastUpdateIDFromServer || 0); + } + }, +}); From 842ec64cc4167f68d0d679dbb809875b59428989 Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Sat, 19 Aug 2023 13:32:57 -0600 Subject: [PATCH 007/315] Start the update manager from authscreens --- .../Navigation/AppNavigator/AuthScreens.js | 2 + src/libs/actions/OnyxUpdatesManager.js | 66 ++++++++++--------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.js b/src/libs/Navigation/AppNavigator/AuthScreens.js index 7317306cdbe6..8078d1d8db84 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.js +++ b/src/libs/Navigation/AppNavigator/AuthScreens.js @@ -35,6 +35,7 @@ import DesktopSignInRedirectPage from '../../../pages/signin/DesktopSignInRedire import styles from '../../../styles/styles'; import * as SessionUtils from '../../SessionUtils'; import getNavigationModalCardStyle from '../../../styles/getNavigationModalCardStyles'; +import OnyxUpdatesManager from '../../actions/OnyxUpdatesManager'; let timezone; let currentAccountID; @@ -125,6 +126,7 @@ class AuthScreens extends React.Component { } componentDidMount() { + OnyxUpdatesManager(); NetworkConnection.listenForReconnect(); NetworkConnection.onReconnect(() => App.reconnectApp(this.props.lastUpdateIDAppliedToClient)); PusherConnectionManager.init(); diff --git a/src/libs/actions/OnyxUpdatesManager.js b/src/libs/actions/OnyxUpdatesManager.js index cdfa610cd146..38a021ae4540 100644 --- a/src/libs/actions/OnyxUpdatesManager.js +++ b/src/libs/actions/OnyxUpdatesManager.js @@ -77,40 +77,42 @@ Onyx.connect({ callback: (val) => (lastUpdateIDAppliedToClient = val), }); -Onyx.connect({ - key: ONYXKEYS.ONYX_UPDATES_FROM_SERVER, - callback: (val) => { - if (!val) { - return; - } +export default () => { + Onyx.connect({ + key: ONYXKEYS.ONYX_UPDATES_FROM_SERVER, + callback: (val) => { + if (!val) { + return; + } - const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; - console.debug('[OnyxUpdates] Received lastUpdateID from server', lastUpdateIDFromServer); - console.debug('[OnyxUpdates] Received previousUpdateID from server', previousUpdateIDFromServer); - console.debug('[OnyxUpdates] Last update ID applied to the client', lastUpdateIDAppliedToClient); + const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; + console.debug('[OnyxUpdates] Received lastUpdateID from server', lastUpdateIDFromServer); + console.debug('[OnyxUpdates] Received previousUpdateID from server', previousUpdateIDFromServer); + console.debug('[OnyxUpdates] Last update ID applied to the client', lastUpdateIDAppliedToClient); - // If the previous update from the server does not match the last update the client got, then the client is missing some updates. - // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. - if (lastUpdateIDAppliedToClient && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { - console.debug('[OnyxUpdates] Gap detected in update IDs so fetching incremental updates'); - Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { - lastUpdateIDFromServer, - previousUpdateIDFromServer, - lastUpdateIDAppliedToClient, - }); + // If the previous update from the server does not match the last update the client got, then the client is missing some updates. + // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. + if (lastUpdateIDAppliedToClient && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { + console.debug('[OnyxUpdates] Gap detected in update IDs so fetching incremental updates'); + Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { + lastUpdateIDFromServer, + previousUpdateIDFromServer, + lastUpdateIDAppliedToClient, + }); - SequentialQueue.pause(); + SequentialQueue.pause(); - App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(() => { - applyOnyxUpdates(updateParams).then(SequentialQueue.unpause); - }); - } else { - applyOnyxUpdates(updateParams); - } + App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(() => { + applyOnyxUpdates(updateParams).then(SequentialQueue.unpause); + }); + } else { + applyOnyxUpdates(updateParams); + } - if (lastUpdateIDFromServer > lastUpdateIDAppliedToClient) { - // Update this value so that it matches what was just received from the server - Onyx.merge(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, lastUpdateIDFromServer || 0); - } - }, -}); + if (lastUpdateIDFromServer > lastUpdateIDAppliedToClient) { + // Update this value so that it matches what was just received from the server + Onyx.merge(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, lastUpdateIDFromServer || 0); + } + }, + }); +}; From ba59617ccd7575fcab247daf2c4b6d0f405cdee4 Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Sat, 19 Aug 2023 13:34:13 -0600 Subject: [PATCH 008/315] Improve logging --- src/libs/actions/OnyxUpdatesManager.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libs/actions/OnyxUpdatesManager.js b/src/libs/actions/OnyxUpdatesManager.js index 38a021ae4540..85120cdbd83b 100644 --- a/src/libs/actions/OnyxUpdatesManager.js +++ b/src/libs/actions/OnyxUpdatesManager.js @@ -78,6 +78,7 @@ Onyx.connect({ }); export default () => { + console.debug('[OnyxUpdateManager] Listening for updates from the server'); Onyx.connect({ key: ONYXKEYS.ONYX_UPDATES_FROM_SERVER, callback: (val) => { @@ -86,14 +87,14 @@ export default () => { } const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; - console.debug('[OnyxUpdates] Received lastUpdateID from server', lastUpdateIDFromServer); - console.debug('[OnyxUpdates] Received previousUpdateID from server', previousUpdateIDFromServer); - console.debug('[OnyxUpdates] Last update ID applied to the client', lastUpdateIDAppliedToClient); + console.debug('[OnyxUpdateManager] Received lastUpdateID from server', lastUpdateIDFromServer); + console.debug('[OnyxUpdateManager] Received previousUpdateID from server', previousUpdateIDFromServer); + console.debug('[OnyxUpdateManager] Last update ID applied to the client', lastUpdateIDAppliedToClient); // If the previous update from the server does not match the last update the client got, then the client is missing some updates. // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. if (lastUpdateIDAppliedToClient && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { - console.debug('[OnyxUpdates] Gap detected in update IDs so fetching incremental updates'); + console.debug('[OnyxUpdateManager] Gap detected in update IDs so fetching incremental updates'); Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { lastUpdateIDFromServer, previousUpdateIDFromServer, From 427043eb2e6fdb2ce7b7aa959d7d551937d626fb Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Sat, 19 Aug 2023 13:35:20 -0600 Subject: [PATCH 009/315] Rename method --- src/libs/Middleware/SaveResponseInOnyx.js | 2 +- src/libs/actions/OnyxUpdates.js | 4 ++-- src/libs/actions/User.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index db978b990751..c3bc66e86fbb 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -38,7 +38,7 @@ function SaveResponseInOnyx(response, request) { }); // Save the update IDs to Onyx so they can be used to fetch incremental updates if the client gets out of sync from the server - OnyxUpdates.saveUpdateIDs( + OnyxUpdates.saveUpdateInformation( { updateType: CONST.ONYX_UPDATE_TYPES.HTTPS, data: { diff --git a/src/libs/actions/OnyxUpdates.js b/src/libs/actions/OnyxUpdates.js index 6e8dffc1b047..48ec66280fdd 100644 --- a/src/libs/actions/OnyxUpdates.js +++ b/src/libs/actions/OnyxUpdates.js @@ -11,7 +11,7 @@ import ONYXKEYS from '../../ONYXKEYS'; * @param {Number} [lastUpdateID] * @param {Number} [previousUpdateID] */ -function saveUpdateIDs(updateParams, lastUpdateID = 0, previousUpdateID = 0) { +function saveUpdateInformation(updateParams, lastUpdateID = 0, previousUpdateID = 0) { // Return early if there were no updateIDs if (!lastUpdateID) { return; @@ -25,4 +25,4 @@ function saveUpdateIDs(updateParams, lastUpdateID = 0, previousUpdateID = 0) { } // eslint-disable-next-line import/prefer-default-export -export {saveUpdateIDs}; +export {saveUpdateInformation}; diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index bd018f1d3e15..c83bd3f37891 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -563,7 +563,7 @@ function subscribeToUserEvents() { return; } - OnyxUpdates.saveUpdateIDs( + OnyxUpdates.saveUpdateInformation( { updateType: CONST.ONYX_UPDATE_TYPES.PUSHER, data: { From ebe24bf6e1895536d27cd830c3951bd4e164f4fc Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Sat, 19 Aug 2023 13:55:26 -0600 Subject: [PATCH 010/315] Rename file and add promises to pusher events --- .../Navigation/AppNavigator/AuthScreens.js | 4 +- src/libs/PusherUtils.js | 5 ++- ...UpdatesManager.js => OnyxUpdateManager.js} | 45 ++++++++++++++++--- src/libs/actions/User.js | 12 +++-- 4 files changed, 52 insertions(+), 14 deletions(-) rename src/libs/actions/{OnyxUpdatesManager.js => OnyxUpdateManager.js} (69%) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.js b/src/libs/Navigation/AppNavigator/AuthScreens.js index 8078d1d8db84..dce177fe5d97 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.js +++ b/src/libs/Navigation/AppNavigator/AuthScreens.js @@ -35,7 +35,7 @@ import DesktopSignInRedirectPage from '../../../pages/signin/DesktopSignInRedire import styles from '../../../styles/styles'; import * as SessionUtils from '../../SessionUtils'; import getNavigationModalCardStyle from '../../../styles/getNavigationModalCardStyles'; -import OnyxUpdatesManager from '../../actions/OnyxUpdatesManager'; +import OnyxUpdateManager from '../../actions/OnyxUpdateManager'; let timezone; let currentAccountID; @@ -126,7 +126,7 @@ class AuthScreens extends React.Component { } componentDidMount() { - OnyxUpdatesManager(); + OnyxUpdateManager(); NetworkConnection.listenForReconnect(); NetworkConnection.onReconnect(() => App.reconnectApp(this.props.lastUpdateIDAppliedToClient)); PusherConnectionManager.init(); diff --git a/src/libs/PusherUtils.js b/src/libs/PusherUtils.js index 9d84bd4012fe..7fdd12cf6296 100644 --- a/src/libs/PusherUtils.js +++ b/src/libs/PusherUtils.js @@ -18,12 +18,13 @@ function subscribeToMultiEvent(eventType, callback) { /** * @param {String} eventType * @param {Mixed} data + * @returns {Promise} */ function triggerMultiEventHandler(eventType, data) { if (!multiEventCallbackMapping[eventType]) { - return; + return new Promise().resolve(); } - multiEventCallbackMapping[eventType](data); + return multiEventCallbackMapping[eventType](data); } /** diff --git a/src/libs/actions/OnyxUpdatesManager.js b/src/libs/actions/OnyxUpdateManager.js similarity index 69% rename from src/libs/actions/OnyxUpdatesManager.js rename to src/libs/actions/OnyxUpdateManager.js index 85120cdbd83b..de9a928f6ee0 100644 --- a/src/libs/actions/OnyxUpdatesManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -38,16 +38,27 @@ function applyHTTPSOnyxUpdates({request, responseData}) { } return Promise.resolve(); }) - .then(() => responseData); + .then(() => { + console.debug('[OnyxUpdateManager] Done applying HTTPS update'); + }); } /** * @param {Object} data * @param {Object} data.multipleEvents + * @returns {Promise} */ function applyPusherOnyxUpdates({multipleEvents}) { - _.each(multipleEvents, (multipleEvent) => { - PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data); + const pusherEventPromises = _.reduce( + multipleEvents, + (result, multipleEvent) => { + result.push(PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data)); + return result; + }, + [], + ); + return Promise.all(pusherEventPromises).then(() => { + console.debug('[OnyxUpdateManager] Done applying Pusher update'); }); } @@ -65,8 +76,7 @@ function applyOnyxUpdates({type, data}) { return applyHTTPSOnyxUpdates(data); } if (type === CONST.ONYX_UPDATE_TYPES.PUSHER) { - applyPusherOnyxUpdates(data); - return new Promise().resolve(); + return applyPusherOnyxUpdates(data); } } @@ -91,6 +101,14 @@ export default () => { console.debug('[OnyxUpdateManager] Received previousUpdateID from server', previousUpdateIDFromServer); console.debug('[OnyxUpdateManager] Last update ID applied to the client', lastUpdateIDAppliedToClient); + // This can happen when a user has just started getting reliable updates from the server but they haven't + // had an OpenApp or ReconnectApp call yet. This can result in never getting reliable updates because + // lastUpdateIDAppliedToClient will always be null. For this case, reconnectApp() will be triggered for them + // to kick start the reliable updates. + if (!lastUpdateIDAppliedToClient && previousUpdateIDFromServer > 0) { + App.reconnectApp(); + } + // If the previous update from the server does not match the last update the client got, then the client is missing some updates. // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. if (lastUpdateIDAppliedToClient && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { @@ -101,10 +119,25 @@ export default () => { lastUpdateIDAppliedToClient, }); + // Pause the sequential queue while the missing Onyx updates are fetched from the server. This is important + // so that the updates are applied in their correct and specific order. If this queue was not paused, then + // there would be a lot of onyx data being applied while we are fetching the missing updates and that would + // put them all out of order. SequentialQueue.pause(); App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(() => { - applyOnyxUpdates(updateParams).then(SequentialQueue.unpause); + console.debug('[OnyxUpdateManager] Done Getting missing onyx updates'); + + // The onyx update from the initial request could have been either from HTTPS or Pusher. + // Now that the missing onyx updates have been applied, we can apply the original onyxUpdates from + // the API request. + applyOnyxUpdates(updateParams).then(() => { + console.debug('[OnyxUpdateManager] Done applying all updates'); + + // Finally, the missing updates were applied, the original update was applied, and now the + // sequential queue is free to continue. + SequentialQueue.unpause(); + }); }); } else { applyOnyxUpdates(updateParams); diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index c83bd3f37891..8822afd9ec08 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -576,17 +576,21 @@ function subscribeToUserEvents() { }); // Handles Onyx updates coming from Pusher through the mega multipleEvents. - PusherUtils.subscribeToMultiEvent(Pusher.TYPE.MULTIPLE_EVENT_TYPE.ONYX_API_UPDATE, (pushJSON) => { + PusherUtils.subscribeToMultiEvent(Pusher.TYPE.MULTIPLE_EVENT_TYPE.ONYX_API_UPDATE, (pushJSON) => SequentialQueue.getCurrentRequest().then(() => { // If we don't have the currentUserAccountID (user is logged out) we don't want to update Onyx with data from Pusher if (!currentUserAccountID) { return; } - Onyx.update(pushJSON); + const onyxUpdatePromise = Onyx.update(pushJSON); triggerNotifications(pushJSON); - }); - }); + + // Return a promise when Onyx is done updating so that the OnyxUpdatesManager can properly apply all + // the onyx updates in order + return onyxUpdatePromise; + }), + ); } /** From ff9a773ae32ff1b19530f714280fadf9b0525d69 Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Sat, 19 Aug 2023 13:57:53 -0600 Subject: [PATCH 011/315] Improve logs --- src/libs/actions/OnyxUpdateManager.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index de9a928f6ee0..ecd81ffbddcf 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -106,13 +106,14 @@ export default () => { // lastUpdateIDAppliedToClient will always be null. For this case, reconnectApp() will be triggered for them // to kick start the reliable updates. if (!lastUpdateIDAppliedToClient && previousUpdateIDFromServer > 0) { + console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); App.reconnectApp(); } // If the previous update from the server does not match the last update the client got, then the client is missing some updates. // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. if (lastUpdateIDAppliedToClient && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { - console.debug('[OnyxUpdateManager] Gap detected in update IDs so fetching incremental updates'); + console.debug(`[OnyxUpdateManager] Client is behind the server by ${previousUpdateIDFromServer - lastUpdateIDAppliedToClient} so fetching incremental updates`); Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { lastUpdateIDFromServer, previousUpdateIDFromServer, @@ -140,6 +141,7 @@ export default () => { }); }); } else { + console.debug(`[OnyxUpdateManager] Client is in sync with the server`); applyOnyxUpdates(updateParams); } From 528062b1c45cc94531039e63dccd010d84bcc494 Mon Sep 17 00:00:00 2001 From: Tim Golen Date: Sat, 19 Aug 2023 14:31:40 -0600 Subject: [PATCH 012/315] Fix the updating and improve comments --- src/App.js | 2 ++ src/libs/Middleware/SaveResponseInOnyx.js | 2 +- src/libs/Navigation/AppNavigator/AuthScreens.js | 2 -- src/libs/actions/OnyxUpdateManager.js | 16 +++++++++++----- src/libs/actions/OnyxUpdates.js | 3 ++- src/libs/actions/User.js | 2 +- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/App.js b/src/App.js index d8faa911f86b..f072f46961ef 100644 --- a/src/App.js +++ b/src/App.js @@ -23,6 +23,7 @@ import ThemeStylesProvider from './styles/ThemeStylesProvider'; import {CurrentReportIDContextProvider} from './components/withCurrentReportID'; import {EnvironmentProvider} from './components/withEnvironment'; import * as Session from './libs/actions/Session'; +import OnyxUpdateManager from './libs/actions/OnyxUpdateManager'; // For easier debugging and development, when we are in web we expose Onyx to the window, so you can more easily set data into Onyx if (window && Environment.isDevelopment()) { @@ -40,6 +41,7 @@ LogBox.ignoreLogs([ const fill = {flex: 1}; function App() { + OnyxUpdateManager(); return ( App.reconnectApp(this.props.lastUpdateIDAppliedToClient)); PusherConnectionManager.init(); diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index ecd81ffbddcf..d08feb8504c7 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -8,8 +8,14 @@ import PusherUtils from '../PusherUtils'; import * as QueuedOnyxUpdates from './QueuedOnyxUpdates'; import * as App from './App'; -// The next 40ish lines of code are used for detecting when there is a gap of OnyxUpdates between what was last applied to the client and the updates the server has. -// When a gap is detected, the missing updates are fetched from the API. +// This file is in charge of looking at the updateIDs coming from the server and comparing them to the last updateID that the client has. +// If the client is behind the server, then we need to pause everything, get the missing updates from the server, apply those updates, +// then restart everything. This will ensure that the client is up-to-date with the server and all the updates have been applied +// in the correct order. +// It's important that this file is separate and not imported by OnyxUpdates.js, so that there are no circular dependencies. Onyx +// is used as a pub/sub mechanism to break out of the circular dependencies. +// The circular dependency happen because this file calls the API GetMissingOnyxUpdates which uses the SaveResponseInOnyx.js file +// (as a middleware). Therefore, SaveResponseInOnyx.js can't import and use this file directly. /** * @param {Object} data @@ -18,6 +24,7 @@ import * as App from './App'; * @returns {Promise} */ function applyHTTPSOnyxUpdates({request, responseData}) { + console.debug('[OnyxUpdateManager] Applying https update'); // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in // the UI. See https://github.com/Expensify/App/issues/12775 for more info. const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; @@ -49,6 +56,7 @@ function applyHTTPSOnyxUpdates({request, responseData}) { * @returns {Promise} */ function applyPusherOnyxUpdates({multipleEvents}) { + console.debug('[OnyxUpdateManager] Applying pusher update'); const pusherEventPromises = _.reduce( multipleEvents, (result, multipleEvent) => { @@ -72,6 +80,7 @@ function applyPusherOnyxUpdates({multipleEvents}) { * @returns {Promise} */ function applyOnyxUpdates({type, data}) { + console.debug(`[OnyxUpdateManager] Applying update type: ${type}`, data); if (type === CONST.ONYX_UPDATE_TYPES.HTTPS) { return applyHTTPSOnyxUpdates(data); } @@ -97,9 +106,6 @@ export default () => { } const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; - console.debug('[OnyxUpdateManager] Received lastUpdateID from server', lastUpdateIDFromServer); - console.debug('[OnyxUpdateManager] Received previousUpdateID from server', previousUpdateIDFromServer); - console.debug('[OnyxUpdateManager] Last update ID applied to the client', lastUpdateIDAppliedToClient); // This can happen when a user has just started getting reliable updates from the server but they haven't // had an OpenApp or ReconnectApp call yet. This can result in never getting reliable updates because diff --git a/src/libs/actions/OnyxUpdates.js b/src/libs/actions/OnyxUpdates.js index 48ec66280fdd..bb09015393f4 100644 --- a/src/libs/actions/OnyxUpdates.js +++ b/src/libs/actions/OnyxUpdates.js @@ -17,7 +17,8 @@ function saveUpdateInformation(updateParams, lastUpdateID = 0, previousUpdateID return; } - Onyx.merge(ONYXKEYS.ONYX_UPDATES_FROM_SERVER, { + // Always use set() here so that the updateParams are never merged and always unique to the request that came in + Onyx.set(ONYXKEYS.ONYX_UPDATES_FROM_SERVER, { lastUpdateIDFromServer: lastUpdateID, previousUpdateIDFromServer: previousUpdateID, updateParams, diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index 8822afd9ec08..b5429ae0893d 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -565,7 +565,7 @@ function subscribeToUserEvents() { OnyxUpdates.saveUpdateInformation( { - updateType: CONST.ONYX_UPDATE_TYPES.PUSHER, + type: CONST.ONYX_UPDATE_TYPES.PUSHER, data: { multipleEvents: pushJSON.updates, }, From 90fb20b6c85230b9513410984ebb1b58f8393f9c Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 23 Aug 2023 08:36:51 +0200 Subject: [PATCH 013/315] [TS migration] Migrate 'Url.js' constants dependency to TypeScript --- src/libs/{Url.js => Url.ts} | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) rename src/libs/{Url.js => Url.ts} (65%) diff --git a/src/libs/Url.js b/src/libs/Url.ts similarity index 65% rename from src/libs/Url.js rename to src/libs/Url.ts index eb96b697a8fc..65b78ad32bf7 100644 --- a/src/libs/Url.js +++ b/src/libs/Url.ts @@ -1,10 +1,9 @@ import 'react-native-url-polyfill/auto'; + /** * Add / to the end of any URL if not present - * @param {String} url - * @returns {String} */ -function addTrailingForwardSlash(url) { +function addTrailingForwardSlash(url: string): string { if (!url.endsWith('/')) { return `${url}/`; } @@ -13,10 +12,8 @@ function addTrailingForwardSlash(url) { /** * Get path from URL string - * @param {String} url - * @returns {String} */ -function getPathFromURL(url) { +function getPathFromURL(url: string): string { try { const parsedUrl = new URL(url); const path = parsedUrl.pathname + parsedUrl.search + parsedUrl.hash; @@ -29,12 +26,9 @@ function getPathFromURL(url) { /** * Determine if two urls have the same origin - * @param {String} url1 - * @param {String} url2 - * @returns {Boolean} */ -function hasSameExpensifyOrigin(url1, url2) { - const removeW3 = (host) => host.replace(/^www\./i, ''); +function hasSameExpensifyOrigin(url1: string, url2: string): boolean { + const removeW3 = (host: string): string => host.replace(/^www\./i, ''); try { const parsedUrl1 = new URL(url1); const parsedUrl2 = new URL(url2); @@ -47,9 +41,4 @@ function hasSameExpensifyOrigin(url1, url2) { } } -export { - // eslint-disable-next-line import/prefer-default-export - addTrailingForwardSlash, - hasSameExpensifyOrigin, - getPathFromURL, -}; +export {addTrailingForwardSlash, hasSameExpensifyOrigin, getPathFromURL}; From e38c99fff3d3d574c181c7569487125e7c9dc034 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 23 Aug 2023 11:29:48 +0200 Subject: [PATCH 014/315] Use inferred return type for a simple function --- src/libs/Url.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Url.ts b/src/libs/Url.ts index 65b78ad32bf7..a21f007e8468 100644 --- a/src/libs/Url.ts +++ b/src/libs/Url.ts @@ -28,7 +28,7 @@ function getPathFromURL(url: string): string { * Determine if two urls have the same origin */ function hasSameExpensifyOrigin(url1: string, url2: string): boolean { - const removeW3 = (host: string): string => host.replace(/^www\./i, ''); + const removeW3 = (host: string) => host.replace(/^www\./i, ''); try { const parsedUrl1 = new URL(url1); const parsedUrl2 = new URL(url2); From f6eb1bae4cd1a9e1e6a3b8a23d282dd22a173cb3 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 23 Aug 2023 11:37:44 +0200 Subject: [PATCH 015/315] [TS migration] Migrate 'ROUTES.js' constant to TypeScript --- src/{ROUTES.js => ROUTES.ts} | 112 ++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 55 deletions(-) rename src/{ROUTES.js => ROUTES.ts} (59%) diff --git a/src/ROUTES.js b/src/ROUTES.ts similarity index 59% rename from src/ROUTES.js rename to src/ROUTES.ts index 3f96d77d477e..26b12da2f68c 100644 --- a/src/ROUTES.js +++ b/src/ROUTES.ts @@ -1,10 +1,16 @@ -import lodashGet from 'lodash/get'; +import {ValueOf} from 'type-fest'; import * as Url from './libs/Url'; +import CONST from './CONST'; /** * This is a file containing constants for all of the routes we want to be able to go to */ +type ParseReportRouteParams = { + reportID: string; + isSubReportPageRoute: boolean; +}; + const REPORT = 'r'; const IOU_REQUEST = 'request/new'; const IOU_BILL = 'split/new'; @@ -20,7 +26,7 @@ export default { BANK_ACCOUNT_NEW: 'bank-account/new', BANK_ACCOUNT_WITH_STEP_TO_OPEN: 'bank-account/:stepToOpen?', BANK_ACCOUNT_PERSONAL: 'bank-account/personal', - getBankAccountRoute: (stepToOpen = '', policyID = '', backTo = '') => { + getBankAccountRoute: (stepToOpen = '', policyID = '', backTo = ''): string => { const backToParam = backTo ? `&backTo=${encodeURIComponent(backTo)}` : ''; return `bank-account/${stepToOpen}?policyID=${policyID}${backToParam}`; }, @@ -48,7 +54,7 @@ export default { SETTINGS_ADD_DEBIT_CARD: 'settings/wallet/add-debit-card', SETTINGS_ADD_BANK_ACCOUNT: 'settings/wallet/add-bank-account', SETTINGS_ENABLE_PAYMENTS: 'settings/wallet/enable-payments', - getSettingsAddLoginRoute: (type) => `settings/addlogin/${type}`, + getSettingsAddLoginRoute: (type: string): string => `settings/addlogin/${type}`, SETTINGS_WALLET_TRANSFER_BALANCE: 'settings/wallet/transfer-balance', SETTINGS_WALLET_CHOOSE_TRANSFER_ACCOUNT: 'settings/wallet/choose-transfer-account', SETTINGS_PERSONAL_DETAILS, @@ -57,7 +63,7 @@ export default { SETTINGS_PERSONAL_DETAILS_ADDRESS: `${SETTINGS_PERSONAL_DETAILS}/address`, SETTINGS_CONTACT_METHODS, SETTINGS_CONTACT_METHOD_DETAILS: `${SETTINGS_CONTACT_METHODS}/:contactMethod/details`, - getEditContactMethodRoute: (contactMethod) => `${SETTINGS_CONTACT_METHODS}/${encodeURIComponent(contactMethod)}/details`, + getEditContactMethodRoute: (contactMethod: string): string => `${SETTINGS_CONTACT_METHODS}/${encodeURIComponent(contactMethod)}/details`, SETTINGS_NEW_CONTACT_METHOD: `${SETTINGS_CONTACT_METHODS}/new`, SETTINGS_2FA: 'settings/security/two-factor-auth', SETTINGS_STATUS, @@ -68,14 +74,14 @@ export default { REPORT, REPORT_WITH_ID: 'r/:reportID?', EDIT_REQUEST: 'r/:threadReportID/edit/:field', - getEditRequestRoute: (threadReportID, field) => `r/${threadReportID}/edit/${field}`, + getEditRequestRoute: (threadReportID: string, field: ValueOf) => `r/${threadReportID}/edit/${field}`, EDIT_CURRENCY_REQUEST: 'r/:threadReportID/edit/currency', - getEditRequestCurrencyRoute: (threadReportID, currency, backTo) => `r/${threadReportID}/edit/currency?currency=${currency}&backTo=${backTo}`, - getReportRoute: (reportID) => `r/${reportID}`, + getEditRequestCurrencyRoute: (threadReportID: string, currency: string, backTo: string): string => `r/${threadReportID}/edit/currency?currency=${currency}&backTo=${backTo}`, + getReportRoute: (reportID: string): string => `r/${reportID}`, REPORT_WITH_ID_DETAILS_SHARE_CODE: 'r/:reportID/details/shareCode', - getReportShareCodeRoute: (reportID) => `r/${reportID}/details/shareCode`, + getReportShareCodeRoute: (reportID: string): string => `r/${reportID}/details/shareCode`, REPORT_ATTACHMENTS: 'r/:reportID/attachment', - getReportAttachmentRoute: (reportID, source) => `r/${reportID}/attachment?source=${encodeURI(source)}`, + getReportAttachmentRoute: (reportID: string, source: string): string => `r/${reportID}/attachment?source=${encodeURI(source)}`, /** This is a utility route used to go to the user's concierge chat, or the sign-in page if the user's not authenticated */ CONCIERGE: 'concierge', @@ -100,56 +106,57 @@ export default { IOU_SEND_ADD_BANK_ACCOUNT: `${IOU_SEND}/add-bank-account`, IOU_SEND_ADD_DEBIT_CARD: `${IOU_SEND}/add-debit-card`, IOU_SEND_ENABLE_PAYMENTS: `${IOU_SEND}/enable-payments`, - getMoneyRequestRoute: (iouType, reportID = '') => `${iouType}/new/${reportID}`, - getMoneyRequestAmountRoute: (iouType, reportID = '') => `${iouType}/new/amount/${reportID}`, - getMoneyRequestParticipantsRoute: (iouType, reportID = '') => `${iouType}/new/participants/${reportID}`, - getMoneyRequestConfirmationRoute: (iouType, reportID = '') => `${iouType}/new/confirmation/${reportID}`, - getMoneyRequestCreatedRoute: (iouType, reportID = '') => `${iouType}/new/date/${reportID}`, - getMoneyRequestCurrencyRoute: (iouType, reportID = '', currency, backTo) => `${iouType}/new/currency/${reportID}?currency=${currency}&backTo=${backTo}`, - getMoneyRequestDescriptionRoute: (iouType, reportID = '') => `${iouType}/new/description/${reportID}`, - getMoneyRequestMerchantRoute: (iouType, reportID = '') => `${iouType}/new/merchant/${reportID}`, - getMoneyRequestDistanceTabRoute: (iouType, reportID = '') => `${iouType}/new/${reportID}/distance`, - getMoneyRequestWaypointRoute: (iouType, waypointIndex) => `${iouType}/new/waypoint/${waypointIndex}`, + getMoneyRequestRoute: (iouType: string, reportID = ''): string => `${iouType}/new/${reportID}`, + getMoneyRequestAmountRoute: (iouType: string, reportID = ''): string => `${iouType}/new/amount/${reportID}`, + getMoneyRequestParticipantsRoute: (iouType: string, reportID = ''): string => `${iouType}/new/participants/${reportID}`, + getMoneyRequestConfirmationRoute: (iouType: string, reportID = ''): string => `${iouType}/new/confirmation/${reportID}`, + getMoneyRequestCreatedRoute: (iouType: string, reportID = ''): string => `${iouType}/new/date/${reportID}`, + getMoneyRequestCurrencyRoute: (iouType: string, reportID: string, currency: string, backTo: string): string => + `${iouType}/new/currency/${reportID}?currency=${currency}&backTo=${backTo}`, + getMoneyRequestDescriptionRoute: (iouType: string, reportID = ''): string => `${iouType}/new/description/${reportID}`, + getMoneyRequestMerchantRoute: (iouType: string, reportID = ''): string => `${iouType}/new/merchant/${reportID}`, + getMoneyRequestDistanceTabRoute: (iouType: string, reportID = ''): string => `${iouType}/new/${reportID}/distance`, + getMoneyRequestWaypointRoute: (iouType: string, waypointIndex: number): string => `${iouType}/new/waypoint/${waypointIndex}`, SPLIT_BILL_DETAILS: `r/:reportID/split/:reportActionID`, - getSplitBillDetailsRoute: (reportID, reportActionID) => `r/${reportID}/split/${reportActionID}`, - getNewTaskRoute: (reportID) => `${NEW_TASK}/${reportID}`, + getSplitBillDetailsRoute: (reportID: string, reportActionID: string) => `r/${reportID}/split/${reportActionID}`, + getNewTaskRoute: (reportID: string): string => `${NEW_TASK}/${reportID}`, NEW_TASK_WITH_REPORT_ID: `${NEW_TASK}/:reportID?`, TASK_TITLE: 'r/:reportID/title', TASK_DESCRIPTION: 'r/:reportID/description', TASK_ASSIGNEE: 'r/:reportID/assignee', - getTaskReportTitleRoute: (reportID) => `r/${reportID}/title`, - getTaskReportDescriptionRoute: (reportID) => `r/${reportID}/description`, - getTaskReportAssigneeRoute: (reportID) => `r/${reportID}/assignee`, + getTaskReportTitleRoute: (reportID: string): string => `r/${reportID}/title`, + getTaskReportDescriptionRoute: (reportID: string): string => `r/${reportID}/description`, + getTaskReportAssigneeRoute: (reportID: string): string => `r/${reportID}/assignee`, NEW_TASK_ASSIGNEE: `${NEW_TASK}/assignee`, NEW_TASK_SHARE_DESTINATION: `${NEW_TASK}/share-destination`, NEW_TASK_DETAILS: `${NEW_TASK}/details`, NEW_TASK_TITLE: `${NEW_TASK}/title`, NEW_TASK_DESCRIPTION: `${NEW_TASK}/description`, FLAG_COMMENT: `flag/:reportID/:reportActionID`, - getFlagCommentRoute: (reportID, reportActionID) => `flag/${reportID}/${reportActionID}`, + getFlagCommentRoute: (reportID: string, reportActionID: string): string => `flag/${reportID}/${reportActionID}`, SEARCH: 'search', DETAILS: 'details', - getDetailsRoute: (login) => `details?login=${encodeURIComponent(login)}`, + getDetailsRoute: (login: string) => `details?login=${encodeURIComponent(login)}`, PROFILE: 'a/:accountID', - getProfileRoute: (accountID) => `a/${accountID}`, + getProfileRoute: (accountID: string | number) => `a/${accountID}`, REPORT_PARTICIPANTS: 'r/:reportID/participants', - getReportParticipantsRoute: (reportID) => `r/${reportID}/participants`, + getReportParticipantsRoute: (reportID: string): string => `r/${reportID}/participants`, REPORT_WITH_ID_DETAILS: 'r/:reportID/details', - getReportDetailsRoute: (reportID) => `r/${reportID}/details`, + getReportDetailsRoute: (reportID: string): string => `r/${reportID}/details`, REPORT_SETTINGS: 'r/:reportID/settings', - getReportSettingsRoute: (reportID) => `r/${reportID}/settings`, + getReportSettingsRoute: (reportID: string): string => `r/${reportID}/settings`, REPORT_SETTINGS_ROOM_NAME: 'r/:reportID/settings/room-name', - getReportSettingsRoomNameRoute: (reportID) => `r/${reportID}/settings/room-name`, + getReportSettingsRoomNameRoute: (reportID: string): string => `r/${reportID}/settings/room-name`, REPORT_SETTINGS_NOTIFICATION_PREFERENCES: 'r/:reportID/settings/notification-preferences', - getReportSettingsNotificationPreferencesRoute: (reportID) => `r/${reportID}/settings/notification-preferences`, + getReportSettingsNotificationPreferencesRoute: (reportID: string): string => `r/${reportID}/settings/notification-preferences`, REPORT_WELCOME_MESSAGE: 'r/:reportID/welcomeMessage', - getReportWelcomeMessageRoute: (reportID) => `r/${reportID}/welcomeMessage`, + getReportWelcomeMessageRoute: (reportID: string): string => `r/${reportID}/welcomeMessage`, REPORT_SETTINGS_WRITE_CAPABILITY: 'r/:reportID/settings/who-can-post', - getReportSettingsWriteCapabilityRoute: (reportID) => `r/${reportID}/settings/who-can-post`, + getReportSettingsWriteCapabilityRoute: (reportID: string): string => `r/${reportID}/settings/who-can-post`, TRANSITION_BETWEEN_APPS: 'transition', VALIDATE_LOGIN: 'v/:accountID/:validateCode', GET_ASSISTANCE: 'get-assistance/:taskID', - getGetAssistanceRoute: (taskID) => `get-assistance/${taskID}`, + getGetAssistanceRoute: (taskID: string): string => `get-assistance/${taskID}`, UNLINK_LOGIN: 'u/:accountID/:validateCode', APPLE_SIGN_IN: 'sign-in-with-apple', @@ -160,7 +167,7 @@ export default { // when linking users from e.com in order to share a session in this app. ENABLE_PAYMENTS: 'enable-payments', WALLET_STATEMENT_WITH_DATE: 'statements/:yearMonth', - getWalletStatementWithDateRoute: (yearMonth) => `statements/${yearMonth}`, + getWalletStatementWithDateRoute: (yearMonth: string) => `statements/${yearMonth}`, WORKSPACE_NEW: 'workspace/new', WORKSPACE_INITIAL: 'workspace/:policyID', WORKSPACE_INVITE: 'workspace/:policyID/invite', @@ -174,23 +181,18 @@ export default { WORKSPACE_TRAVEL: 'workspace/:policyID/travel', WORKSPACE_MEMBERS: 'workspace/:policyID/members', WORKSPACE_NEW_ROOM: 'workspace/new-room', - getWorkspaceInitialRoute: (policyID) => `workspace/${policyID}`, - getWorkspaceInviteRoute: (policyID) => `workspace/${policyID}/invite`, - getWorkspaceInviteMessageRoute: (policyID) => `workspace/${policyID}/invite-message`, - getWorkspaceSettingsRoute: (policyID) => `workspace/${policyID}/settings`, - getWorkspaceCardRoute: (policyID) => `workspace/${policyID}/card`, - getWorkspaceReimburseRoute: (policyID) => `workspace/${policyID}/reimburse`, - getWorkspaceRateAndUnitRoute: (policyID) => `workspace/${policyID}/rateandunit`, - getWorkspaceBillsRoute: (policyID) => `workspace/${policyID}/bills`, - getWorkspaceInvoicesRoute: (policyID) => `workspace/${policyID}/invoices`, - getWorkspaceTravelRoute: (policyID) => `workspace/${policyID}/travel`, - getWorkspaceMembersRoute: (policyID) => `workspace/${policyID}/members`, - - /** - * @param {String} route - * @returns {Object} - */ - parseReportRouteParams: (route) => { + getWorkspaceInitialRoute: (policyID: string): string => `workspace/${policyID}`, + getWorkspaceInviteRoute: (policyID: string): string => `workspace/${policyID}/invite`, + getWorkspaceInviteMessageRoute: (policyID: string): string => `workspace/${policyID}/invite-message`, + getWorkspaceSettingsRoute: (policyID: string): string => `workspace/${policyID}/settings`, + getWorkspaceCardRoute: (policyID: string): string => `workspace/${policyID}/card`, + getWorkspaceReimburseRoute: (policyID: string): string => `workspace/${policyID}/reimburse`, + getWorkspaceRateAndUnitRoute: (policyID: string): string => `workspace/${policyID}/rateandunit`, + getWorkspaceBillsRoute: (policyID: string): string => `workspace/${policyID}/bills`, + getWorkspaceInvoicesRoute: (policyID: string): string => `workspace/${policyID}/invoices`, + getWorkspaceTravelRoute: (policyID: string): string => `workspace/${policyID}/travel`, + getWorkspaceMembersRoute: (policyID: string): string => `workspace/${policyID}/members`, + parseReportRouteParams: (route: string): ParseReportRouteParams => { let parsingRoute = route; if (parsingRoute.at(0) === '/') { // remove the first slash @@ -203,9 +205,9 @@ export default { const pathSegments = parsingRoute.split('/'); return { - reportID: lodashGet(pathSegments, 1), + reportID: pathSegments[1], isSubReportPageRoute: pathSegments.length > 2, }; }, SIGN_IN_MODAL: 'sign-in-modal', -}; +} as const; From 2ac26e5ae9fafba27c3f205e8d9cb07c66ffbc7a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 23 Aug 2023 11:43:02 +0200 Subject: [PATCH 016/315] Remove explicit return types --- src/ROUTES.ts | 80 +++++++++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 26b12da2f68c..8c3f3a7868a7 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -54,7 +54,7 @@ export default { SETTINGS_ADD_DEBIT_CARD: 'settings/wallet/add-debit-card', SETTINGS_ADD_BANK_ACCOUNT: 'settings/wallet/add-bank-account', SETTINGS_ENABLE_PAYMENTS: 'settings/wallet/enable-payments', - getSettingsAddLoginRoute: (type: string): string => `settings/addlogin/${type}`, + getSettingsAddLoginRoute: (type: string) => `settings/addlogin/${type}`, SETTINGS_WALLET_TRANSFER_BALANCE: 'settings/wallet/transfer-balance', SETTINGS_WALLET_CHOOSE_TRANSFER_ACCOUNT: 'settings/wallet/choose-transfer-account', SETTINGS_PERSONAL_DETAILS, @@ -63,7 +63,7 @@ export default { SETTINGS_PERSONAL_DETAILS_ADDRESS: `${SETTINGS_PERSONAL_DETAILS}/address`, SETTINGS_CONTACT_METHODS, SETTINGS_CONTACT_METHOD_DETAILS: `${SETTINGS_CONTACT_METHODS}/:contactMethod/details`, - getEditContactMethodRoute: (contactMethod: string): string => `${SETTINGS_CONTACT_METHODS}/${encodeURIComponent(contactMethod)}/details`, + getEditContactMethodRoute: (contactMethod: string) => `${SETTINGS_CONTACT_METHODS}/${encodeURIComponent(contactMethod)}/details`, SETTINGS_NEW_CONTACT_METHOD: `${SETTINGS_CONTACT_METHODS}/new`, SETTINGS_2FA: 'settings/security/two-factor-auth', SETTINGS_STATUS, @@ -76,12 +76,12 @@ export default { EDIT_REQUEST: 'r/:threadReportID/edit/:field', getEditRequestRoute: (threadReportID: string, field: ValueOf) => `r/${threadReportID}/edit/${field}`, EDIT_CURRENCY_REQUEST: 'r/:threadReportID/edit/currency', - getEditRequestCurrencyRoute: (threadReportID: string, currency: string, backTo: string): string => `r/${threadReportID}/edit/currency?currency=${currency}&backTo=${backTo}`, - getReportRoute: (reportID: string): string => `r/${reportID}`, + getEditRequestCurrencyRoute: (threadReportID: string, currency: string, backTo: string) => `r/${threadReportID}/edit/currency?currency=${currency}&backTo=${backTo}`, + getReportRoute: (reportID: string) => `r/${reportID}`, REPORT_WITH_ID_DETAILS_SHARE_CODE: 'r/:reportID/details/shareCode', - getReportShareCodeRoute: (reportID: string): string => `r/${reportID}/details/shareCode`, + getReportShareCodeRoute: (reportID: string) => `r/${reportID}/details/shareCode`, REPORT_ATTACHMENTS: 'r/:reportID/attachment', - getReportAttachmentRoute: (reportID: string, source: string): string => `r/${reportID}/attachment?source=${encodeURI(source)}`, + getReportAttachmentRoute: (reportID: string, source: string) => `r/${reportID}/attachment?source=${encodeURI(source)}`, /** This is a utility route used to go to the user's concierge chat, or the sign-in page if the user's not authenticated */ CONCIERGE: 'concierge', @@ -106,57 +106,57 @@ export default { IOU_SEND_ADD_BANK_ACCOUNT: `${IOU_SEND}/add-bank-account`, IOU_SEND_ADD_DEBIT_CARD: `${IOU_SEND}/add-debit-card`, IOU_SEND_ENABLE_PAYMENTS: `${IOU_SEND}/enable-payments`, - getMoneyRequestRoute: (iouType: string, reportID = ''): string => `${iouType}/new/${reportID}`, - getMoneyRequestAmountRoute: (iouType: string, reportID = ''): string => `${iouType}/new/amount/${reportID}`, - getMoneyRequestParticipantsRoute: (iouType: string, reportID = ''): string => `${iouType}/new/participants/${reportID}`, - getMoneyRequestConfirmationRoute: (iouType: string, reportID = ''): string => `${iouType}/new/confirmation/${reportID}`, - getMoneyRequestCreatedRoute: (iouType: string, reportID = ''): string => `${iouType}/new/date/${reportID}`, - getMoneyRequestCurrencyRoute: (iouType: string, reportID: string, currency: string, backTo: string): string => + getMoneyRequestRoute: (iouType: string, reportID = '') => `${iouType}/new/${reportID}`, + getMoneyRequestAmountRoute: (iouType: string, reportID = '') => `${iouType}/new/amount/${reportID}`, + getMoneyRequestParticipantsRoute: (iouType: string, reportID = '') => `${iouType}/new/participants/${reportID}`, + getMoneyRequestConfirmationRoute: (iouType: string, reportID = '') => `${iouType}/new/confirmation/${reportID}`, + getMoneyRequestCreatedRoute: (iouType: string, reportID = '') => `${iouType}/new/date/${reportID}`, + getMoneyRequestCurrencyRoute: (iouType: string, reportID: string, currency: string, backTo: string) => `${iouType}/new/currency/${reportID}?currency=${currency}&backTo=${backTo}`, - getMoneyRequestDescriptionRoute: (iouType: string, reportID = ''): string => `${iouType}/new/description/${reportID}`, - getMoneyRequestMerchantRoute: (iouType: string, reportID = ''): string => `${iouType}/new/merchant/${reportID}`, - getMoneyRequestDistanceTabRoute: (iouType: string, reportID = ''): string => `${iouType}/new/${reportID}/distance`, - getMoneyRequestWaypointRoute: (iouType: string, waypointIndex: number): string => `${iouType}/new/waypoint/${waypointIndex}`, + getMoneyRequestDescriptionRoute: (iouType: string, reportID = '') => `${iouType}/new/description/${reportID}`, + getMoneyRequestMerchantRoute: (iouType: string, reportID = '') => `${iouType}/new/merchant/${reportID}`, + getMoneyRequestDistanceTabRoute: (iouType: string, reportID = '') => `${iouType}/new/${reportID}/distance`, + getMoneyRequestWaypointRoute: (iouType: string, waypointIndex: number) => `${iouType}/new/waypoint/${waypointIndex}`, SPLIT_BILL_DETAILS: `r/:reportID/split/:reportActionID`, getSplitBillDetailsRoute: (reportID: string, reportActionID: string) => `r/${reportID}/split/${reportActionID}`, - getNewTaskRoute: (reportID: string): string => `${NEW_TASK}/${reportID}`, + getNewTaskRoute: (reportID: string) => `${NEW_TASK}/${reportID}`, NEW_TASK_WITH_REPORT_ID: `${NEW_TASK}/:reportID?`, TASK_TITLE: 'r/:reportID/title', TASK_DESCRIPTION: 'r/:reportID/description', TASK_ASSIGNEE: 'r/:reportID/assignee', - getTaskReportTitleRoute: (reportID: string): string => `r/${reportID}/title`, - getTaskReportDescriptionRoute: (reportID: string): string => `r/${reportID}/description`, - getTaskReportAssigneeRoute: (reportID: string): string => `r/${reportID}/assignee`, + getTaskReportTitleRoute: (reportID: string) => `r/${reportID}/title`, + getTaskReportDescriptionRoute: (reportID: string) => `r/${reportID}/description`, + getTaskReportAssigneeRoute: (reportID: string) => `r/${reportID}/assignee`, NEW_TASK_ASSIGNEE: `${NEW_TASK}/assignee`, NEW_TASK_SHARE_DESTINATION: `${NEW_TASK}/share-destination`, NEW_TASK_DETAILS: `${NEW_TASK}/details`, NEW_TASK_TITLE: `${NEW_TASK}/title`, NEW_TASK_DESCRIPTION: `${NEW_TASK}/description`, FLAG_COMMENT: `flag/:reportID/:reportActionID`, - getFlagCommentRoute: (reportID: string, reportActionID: string): string => `flag/${reportID}/${reportActionID}`, + getFlagCommentRoute: (reportID: string, reportActionID: string) => `flag/${reportID}/${reportActionID}`, SEARCH: 'search', DETAILS: 'details', getDetailsRoute: (login: string) => `details?login=${encodeURIComponent(login)}`, PROFILE: 'a/:accountID', getProfileRoute: (accountID: string | number) => `a/${accountID}`, REPORT_PARTICIPANTS: 'r/:reportID/participants', - getReportParticipantsRoute: (reportID: string): string => `r/${reportID}/participants`, + getReportParticipantsRoute: (reportID: string) => `r/${reportID}/participants`, REPORT_WITH_ID_DETAILS: 'r/:reportID/details', - getReportDetailsRoute: (reportID: string): string => `r/${reportID}/details`, + getReportDetailsRoute: (reportID: string) => `r/${reportID}/details`, REPORT_SETTINGS: 'r/:reportID/settings', - getReportSettingsRoute: (reportID: string): string => `r/${reportID}/settings`, + getReportSettingsRoute: (reportID: string) => `r/${reportID}/settings`, REPORT_SETTINGS_ROOM_NAME: 'r/:reportID/settings/room-name', - getReportSettingsRoomNameRoute: (reportID: string): string => `r/${reportID}/settings/room-name`, + getReportSettingsRoomNameRoute: (reportID: string) => `r/${reportID}/settings/room-name`, REPORT_SETTINGS_NOTIFICATION_PREFERENCES: 'r/:reportID/settings/notification-preferences', - getReportSettingsNotificationPreferencesRoute: (reportID: string): string => `r/${reportID}/settings/notification-preferences`, + getReportSettingsNotificationPreferencesRoute: (reportID: string) => `r/${reportID}/settings/notification-preferences`, REPORT_WELCOME_MESSAGE: 'r/:reportID/welcomeMessage', - getReportWelcomeMessageRoute: (reportID: string): string => `r/${reportID}/welcomeMessage`, + getReportWelcomeMessageRoute: (reportID: string) => `r/${reportID}/welcomeMessage`, REPORT_SETTINGS_WRITE_CAPABILITY: 'r/:reportID/settings/who-can-post', - getReportSettingsWriteCapabilityRoute: (reportID: string): string => `r/${reportID}/settings/who-can-post`, + getReportSettingsWriteCapabilityRoute: (reportID: string) => `r/${reportID}/settings/who-can-post`, TRANSITION_BETWEEN_APPS: 'transition', VALIDATE_LOGIN: 'v/:accountID/:validateCode', GET_ASSISTANCE: 'get-assistance/:taskID', - getGetAssistanceRoute: (taskID: string): string => `get-assistance/${taskID}`, + getGetAssistanceRoute: (taskID: string) => `get-assistance/${taskID}`, UNLINK_LOGIN: 'u/:accountID/:validateCode', APPLE_SIGN_IN: 'sign-in-with-apple', @@ -181,17 +181,17 @@ export default { WORKSPACE_TRAVEL: 'workspace/:policyID/travel', WORKSPACE_MEMBERS: 'workspace/:policyID/members', WORKSPACE_NEW_ROOM: 'workspace/new-room', - getWorkspaceInitialRoute: (policyID: string): string => `workspace/${policyID}`, - getWorkspaceInviteRoute: (policyID: string): string => `workspace/${policyID}/invite`, - getWorkspaceInviteMessageRoute: (policyID: string): string => `workspace/${policyID}/invite-message`, - getWorkspaceSettingsRoute: (policyID: string): string => `workspace/${policyID}/settings`, - getWorkspaceCardRoute: (policyID: string): string => `workspace/${policyID}/card`, - getWorkspaceReimburseRoute: (policyID: string): string => `workspace/${policyID}/reimburse`, - getWorkspaceRateAndUnitRoute: (policyID: string): string => `workspace/${policyID}/rateandunit`, - getWorkspaceBillsRoute: (policyID: string): string => `workspace/${policyID}/bills`, - getWorkspaceInvoicesRoute: (policyID: string): string => `workspace/${policyID}/invoices`, - getWorkspaceTravelRoute: (policyID: string): string => `workspace/${policyID}/travel`, - getWorkspaceMembersRoute: (policyID: string): string => `workspace/${policyID}/members`, + getWorkspaceInitialRoute: (policyID: string) => `workspace/${policyID}`, + getWorkspaceInviteRoute: (policyID: string) => `workspace/${policyID}/invite`, + getWorkspaceInviteMessageRoute: (policyID: string) => `workspace/${policyID}/invite-message`, + getWorkspaceSettingsRoute: (policyID: string) => `workspace/${policyID}/settings`, + getWorkspaceCardRoute: (policyID: string) => `workspace/${policyID}/card`, + getWorkspaceReimburseRoute: (policyID: string) => `workspace/${policyID}/reimburse`, + getWorkspaceRateAndUnitRoute: (policyID: string) => `workspace/${policyID}/rateandunit`, + getWorkspaceBillsRoute: (policyID: string) => `workspace/${policyID}/bills`, + getWorkspaceInvoicesRoute: (policyID: string) => `workspace/${policyID}/invoices`, + getWorkspaceTravelRoute: (policyID: string) => `workspace/${policyID}/travel`, + getWorkspaceMembersRoute: (policyID: string) => `workspace/${policyID}/members`, parseReportRouteParams: (route: string): ParseReportRouteParams => { let parsingRoute = route; if (parsingRoute.at(0) === '/') { From 1a8ac614aed9a043ddf24991d29566dfcb7ce649 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 23 Aug 2023 12:55:12 +0200 Subject: [PATCH 017/315] Run prettier --- src/ROUTES.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 8c3f3a7868a7..d44e638a1f49 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -111,8 +111,7 @@ export default { getMoneyRequestParticipantsRoute: (iouType: string, reportID = '') => `${iouType}/new/participants/${reportID}`, getMoneyRequestConfirmationRoute: (iouType: string, reportID = '') => `${iouType}/new/confirmation/${reportID}`, getMoneyRequestCreatedRoute: (iouType: string, reportID = '') => `${iouType}/new/date/${reportID}`, - getMoneyRequestCurrencyRoute: (iouType: string, reportID: string, currency: string, backTo: string) => - `${iouType}/new/currency/${reportID}?currency=${currency}&backTo=${backTo}`, + getMoneyRequestCurrencyRoute: (iouType: string, reportID: string, currency: string, backTo: string) => `${iouType}/new/currency/${reportID}?currency=${currency}&backTo=${backTo}`, getMoneyRequestDescriptionRoute: (iouType: string, reportID = '') => `${iouType}/new/description/${reportID}`, getMoneyRequestMerchantRoute: (iouType: string, reportID = '') => `${iouType}/new/merchant/${reportID}`, getMoneyRequestDistanceTabRoute: (iouType: string, reportID = '') => `${iouType}/new/${reportID}/distance`, From d434051d9fb67be9486417a659aa0f157fbb70fa Mon Sep 17 00:00:00 2001 From: Wildan Muhlis Date: Wed, 23 Aug 2023 21:43:23 +0700 Subject: [PATCH 018/315] Implement checkHover when hovered element stuck --- src/components/Hoverable/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/components/Hoverable/index.js b/src/components/Hoverable/index.js index 35bbd4af7fd6..634b91197eb5 100644 --- a/src/components/Hoverable/index.js +++ b/src/components/Hoverable/index.js @@ -13,6 +13,7 @@ class Hoverable extends Component { super(props); this.handleVisibilityChange = this.handleVisibilityChange.bind(this); + this.checkHover = _.debounce(this.checkHover.bind(this), 100); this.state = { isHovered: false, @@ -23,6 +24,7 @@ class Hoverable extends Component { componentDidMount() { document.addEventListener('visibilitychange', this.handleVisibilityChange); + document.addEventListener('mouseover', this.checkHover); } componentDidUpdate(prevProps) { @@ -37,6 +39,7 @@ class Hoverable extends Component { componentWillUnmount() { document.removeEventListener('visibilitychange', this.handleVisibilityChange); + document.removeEventListener('mouseover', this.checkHover); } /** @@ -62,6 +65,18 @@ class Hoverable extends Component { this.setIsHovered(false); } + checkHover = (e) => { + if (!this.wrapperView || !this.state.isHovered) { + return; + } + + if (this.wrapperView.contains(e.target)) { + return; + } + + this.setIsHovered(false); + }; + render() { let child = this.props.children; if (_.isArray(this.props.children) && this.props.children.length === 1) { From 7b421695dad00701c1b166386d04333b60085a9f Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 23 Aug 2023 21:21:20 +0200 Subject: [PATCH 019/315] added ANY to format on updates since that's still undefined --- src/ONYXKEYS.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index d4d2ab1f90a6..d4cb591c704d 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -350,7 +350,7 @@ type OnyxValues = { [ONYXKEYS.SELECTED_TAB]: string; [ONYXKEYS.RECEIPT_MODAL]: OnyxTypes.ReceiptModal; [ONYXKEYS.MAPBOX_ACCESS_TOKEN]: OnyxTypes.MapboxAccessToken; - [ONYXKEYS.ONYX_UPDATES_FROM_SERVER]: number; + [ONYXKEYS.ONYX_UPDATES_FROM_SERVER]: any; [ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT]: number; // Collections From 3002c64da3ef4811ce2685af3223bd30f1e994c3 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 23 Aug 2023 21:21:54 +0200 Subject: [PATCH 020/315] adding early return in case of responses without onyxData --- src/libs/Middleware/SaveResponseInOnyx.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index efb38ef19018..24bf60e5cdaf 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -27,6 +27,13 @@ function SaveResponseInOnyx(response, request) { // Supports both the old format and the new format const onyxUpdates = _.isArray(responseData) ? responseData : responseData.onyxData; + + // Sometimes we call requests that are successfull but they don't have any response. Let's return early since + // we don't need to store anything here. + if(!onyxUpdates){ + return; + } + // If there is an OnyxUpdate for using memory only keys, enable them _.find(onyxUpdates, ({key, value}) => { if (key !== ONYXKEYS.IS_USING_MEMORY_ONLY_KEYS || !value) { From c4d40949c3ad2de650a5561956a874de640a1d09 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 23 Aug 2023 21:22:45 +0200 Subject: [PATCH 021/315] updating save function to not return early if missing lastUpdateID --- src/libs/actions/OnyxUpdates.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/libs/actions/OnyxUpdates.js b/src/libs/actions/OnyxUpdates.js index bb09015393f4..f5b7adeab23c 100644 --- a/src/libs/actions/OnyxUpdates.js +++ b/src/libs/actions/OnyxUpdates.js @@ -12,11 +12,6 @@ import ONYXKEYS from '../../ONYXKEYS'; * @param {Number} [previousUpdateID] */ function saveUpdateInformation(updateParams, lastUpdateID = 0, previousUpdateID = 0) { - // Return early if there were no updateIDs - if (!lastUpdateID) { - return; - } - // Always use set() here so that the updateParams are never merged and always unique to the request that came in Onyx.set(ONYXKEYS.ONYX_UPDATES_FROM_SERVER, { lastUpdateIDFromServer: lastUpdateID, From fe50fd0ebfa76ea8556bf7a6edf8beff0e556adb Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 23 Aug 2023 21:23:40 +0200 Subject: [PATCH 022/315] adding check on reconnect app after switching to updates beta to not do the request if this is open app --- src/libs/actions/OnyxUpdateManager.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index d08feb8504c7..8003fd09bc95 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -104,6 +104,7 @@ export default () => { if (!val) { return; } + debugger; const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; @@ -111,7 +112,12 @@ export default () => { // had an OpenApp or ReconnectApp call yet. This can result in never getting reliable updates because // lastUpdateIDAppliedToClient will always be null. For this case, reconnectApp() will be triggered for them // to kick start the reliable updates. - if (!lastUpdateIDAppliedToClient && previousUpdateIDFromServer > 0) { + if ( + !lastUpdateIDAppliedToClient + && previousUpdateIDFromServer > 0 + && updateParams.type == CONST.ONYX_UPDATE_TYPES.HTTPS + && updateParams.request.command !== "OpenApp" + ) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); App.reconnectApp(); } From a5e812751a1b87ebee06a9832b7ce6c966f77c79 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 23 Aug 2023 21:25:05 +0200 Subject: [PATCH 023/315] adding reconnect app to the list of methods we shouldn't check --- src/libs/actions/OnyxUpdateManager.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 8003fd09bc95..71b6f0607899 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -104,7 +104,6 @@ export default () => { if (!val) { return; } - debugger; const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; @@ -116,8 +115,10 @@ export default () => { !lastUpdateIDAppliedToClient && previousUpdateIDFromServer > 0 && updateParams.type == CONST.ONYX_UPDATE_TYPES.HTTPS - && updateParams.request.command !== "OpenApp" - ) { + && ( + updateParams.request.command !== "OpenApp" + || updateParams.request.command !== "ReconnectApp" + )) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); App.reconnectApp(); } From ba47492e63aefa135d49954fd43c94fbc51b84d5 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 23 Aug 2023 22:27:53 +0200 Subject: [PATCH 024/315] adding check to prevent us from running both ReconnectApp and GetOnyxUpdates on the same request --- src/libs/actions/OnyxUpdateManager.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 71b6f0607899..3cdcfeda40d0 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -105,27 +105,37 @@ export default () => { return; } + // Since people will have migrations hapening in their accounts while they use the app, we don't want to trigger + // a full ReconnectApp and then trigger a GetOnyxUpdates. Let's use this as a control variable until we enable + // the beta to all users. + let updateEnablesBeta = false; + const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; // This can happen when a user has just started getting reliable updates from the server but they haven't // had an OpenApp or ReconnectApp call yet. This can result in never getting reliable updates because // lastUpdateIDAppliedToClient will always be null. For this case, reconnectApp() will be triggered for them - // to kick start the reliable updates. + // to kick start the reliable updates. We also filter OpenApp and ReconnectApp so we don't create a loop. if ( !lastUpdateIDAppliedToClient && previousUpdateIDFromServer > 0 - && updateParams.type == CONST.ONYX_UPDATE_TYPES.HTTPS && ( - updateParams.request.command !== "OpenApp" - || updateParams.request.command !== "ReconnectApp" + updateParams.type == CONST.ONYX_UPDATE_TYPES.PUSHER + || ( + updateParams.type == CONST.ONYX_UPDATE_TYPES.HTTPS + && ( + updateParams.data.request.command !== "OpenApp" + || updateParams.data.request.command !== "ReconnectApp" + )) )) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); App.reconnectApp(); + updateEnablesBeta = true; } // If the previous update from the server does not match the last update the client got, then the client is missing some updates. // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. - if (lastUpdateIDAppliedToClient && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { + if (!updateEnablesBeta && previousUpdateIDFromServer && (lastUpdateIDAppliedToClient < previousUpdateIDFromServer)) { console.debug(`[OnyxUpdateManager] Client is behind the server by ${previousUpdateIDFromServer - lastUpdateIDAppliedToClient} so fetching incremental updates`); Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { lastUpdateIDFromServer, From dde0814580ebab0af4e384ffdb705512abeeaf75 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 23 Aug 2023 22:28:51 +0200 Subject: [PATCH 025/315] prettier --- src/libs/Middleware/SaveResponseInOnyx.js | 2 +- src/libs/actions/OnyxUpdateManager.js | 20 +++++++------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index 24bf60e5cdaf..13244dd64e36 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -30,7 +30,7 @@ function SaveResponseInOnyx(response, request) { // Sometimes we call requests that are successfull but they don't have any response. Let's return early since // we don't need to store anything here. - if(!onyxUpdates){ + if (!onyxUpdates) { return; } diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 3cdcfeda40d0..039f89e146c3 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -109,7 +109,7 @@ export default () => { // a full ReconnectApp and then trigger a GetOnyxUpdates. Let's use this as a control variable until we enable // the beta to all users. let updateEnablesBeta = false; - + const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; // This can happen when a user has just started getting reliable updates from the server but they haven't @@ -117,17 +117,11 @@ export default () => { // lastUpdateIDAppliedToClient will always be null. For this case, reconnectApp() will be triggered for them // to kick start the reliable updates. We also filter OpenApp and ReconnectApp so we don't create a loop. if ( - !lastUpdateIDAppliedToClient - && previousUpdateIDFromServer > 0 - && ( - updateParams.type == CONST.ONYX_UPDATE_TYPES.PUSHER - || ( - updateParams.type == CONST.ONYX_UPDATE_TYPES.HTTPS - && ( - updateParams.data.request.command !== "OpenApp" - || updateParams.data.request.command !== "ReconnectApp" - )) - )) { + !lastUpdateIDAppliedToClient && + previousUpdateIDFromServer > 0 && + (updateParams.type == CONST.ONYX_UPDATE_TYPES.PUSHER || + (updateParams.type == CONST.ONYX_UPDATE_TYPES.HTTPS && (updateParams.data.request.command !== 'OpenApp' || updateParams.data.request.command !== 'ReconnectApp'))) + ) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); App.reconnectApp(); updateEnablesBeta = true; @@ -135,7 +129,7 @@ export default () => { // If the previous update from the server does not match the last update the client got, then the client is missing some updates. // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. - if (!updateEnablesBeta && previousUpdateIDFromServer && (lastUpdateIDAppliedToClient < previousUpdateIDFromServer)) { + if (!updateEnablesBeta && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { console.debug(`[OnyxUpdateManager] Client is behind the server by ${previousUpdateIDFromServer - lastUpdateIDAppliedToClient} so fetching incremental updates`); Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { lastUpdateIDFromServer, From 2d07e87adb6a8a3f5b2ad549f13534be912d877d Mon Sep 17 00:00:00 2001 From: Johannes Idarsson <138504087+joh42@users.noreply.github.com> Date: Thu, 24 Aug 2023 13:58:25 +0200 Subject: [PATCH 026/315] added focus method to the BaseOptionsSelector --- src/components/OptionsSelector/BaseOptionsSelector.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/components/OptionsSelector/BaseOptionsSelector.js b/src/components/OptionsSelector/BaseOptionsSelector.js index 7273616ea57e..36dc83a842a6 100755 --- a/src/components/OptionsSelector/BaseOptionsSelector.js +++ b/src/components/OptionsSelector/BaseOptionsSelector.js @@ -157,6 +157,14 @@ class BaseOptionsSelector extends Component { } } + focus() { + if (!this.textInput) { + return; + } + + this.textInput.focus(); + } + /** * @param {Array} allOptions * @returns {Number} From 3eb392c95d1bef0b9a913e6a0d4de314da70859b Mon Sep 17 00:00:00 2001 From: Johannes Idarsson <138504087+joh42@users.noreply.github.com> Date: Thu, 24 Aug 2023 14:01:10 +0200 Subject: [PATCH 027/315] implemented onEntryTransitionEnd focusing in the IOUCurrencySelection page --- src/pages/iou/IOUCurrencySelection.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/pages/iou/IOUCurrencySelection.js b/src/pages/iou/IOUCurrencySelection.js index f9dc03c66f90..88f2bb638ab2 100644 --- a/src/pages/iou/IOUCurrencySelection.js +++ b/src/pages/iou/IOUCurrencySelection.js @@ -1,4 +1,4 @@ -import React, {useState, useMemo, useCallback} from 'react'; +import React, {useState, useMemo, useCallback, useRef} from 'react'; import PropTypes from 'prop-types'; import {withOnyx} from 'react-native-onyx'; import _ from 'underscore'; @@ -55,6 +55,7 @@ const defaultProps = { function IOUCurrencySelection(props) { const [searchValue, setSearchValue] = useState(''); + const optionsSelectorRef = useRef(); const selectedCurrencyCode = lodashGet(props.route, 'params.currency', props.iou.currency, CONST.CURRENCY.USD); const iouType = lodashGet(props.route, 'params.iouType', CONST.IOU.MONEY_REQUEST_TYPE.REQUEST); @@ -112,7 +113,10 @@ function IOUCurrencySelection(props) { }, [currencyList, searchValue, selectedCurrencyCode, translate]); return ( - + optionsSelectorRef.current && optionsSelectorRef.current.focus()} + > {({safeAreaPaddingBottomStyle}) => ( <> )} From 3de0841a55121918632706d964e8c27504ddf682 Mon Sep 17 00:00:00 2001 From: Johannes Idarsson <138504087+joh42@users.noreply.github.com> Date: Thu, 24 Aug 2023 14:10:57 +0200 Subject: [PATCH 028/315] moved the focus method down to make linter happy --- .../OptionsSelector/BaseOptionsSelector.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/OptionsSelector/BaseOptionsSelector.js b/src/components/OptionsSelector/BaseOptionsSelector.js index 36dc83a842a6..4aa1f0c1c4e3 100755 --- a/src/components/OptionsSelector/BaseOptionsSelector.js +++ b/src/components/OptionsSelector/BaseOptionsSelector.js @@ -157,14 +157,6 @@ class BaseOptionsSelector extends Component { } } - focus() { - if (!this.textInput) { - return; - } - - this.textInput.focus(); - } - /** * @param {Array} allOptions * @returns {Number} @@ -212,6 +204,14 @@ class BaseOptionsSelector extends Component { } } + focus() { + if (!this.textInput) { + return; + } + + this.textInput.focus(); + } + /** * Flattens the sections into a single array of options. * Each object in this array is enhanced to have: From 321041a4b27eb80b8402421591a68d2b2e6735d3 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 24 Aug 2023 18:33:11 +0200 Subject: [PATCH 029/315] adding fields that were missing in the request object --- src/types/onyx/Request.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/types/onyx/Request.ts b/src/types/onyx/Request.ts index e730dfd807fb..cc57c9410e30 100644 --- a/src/types/onyx/Request.ts +++ b/src/types/onyx/Request.ts @@ -1,8 +1,12 @@ +import { OnyxUpdate } from "react-native-onyx"; + type Request = { command?: string; data?: Record; type?: string; shouldUseSecure?: boolean; + successData?: OnyxUpdate[]; + failureData?: OnyxUpdate[]; }; export default Request; From 85bd8ba018fa2b8df89b2cd2d6e68c8b317138eb Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 24 Aug 2023 18:33:30 +0200 Subject: [PATCH 030/315] adding response object --- src/types/onyx/Response.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/types/onyx/Response.ts diff --git a/src/types/onyx/Response.ts b/src/types/onyx/Response.ts new file mode 100644 index 000000000000..01956adffc87 --- /dev/null +++ b/src/types/onyx/Response.ts @@ -0,0 +1,11 @@ +import { OnyxUpdate } from "react-native-onyx"; + +type Request = { + previousUpdateID?: number; + lastUpdateID?: number; + jsonCode?: number; + onyxData?: OnyxUpdate[]; + requestID?: string; +}; + +export default Response; From 659de586ca7bdf3c1bf7ed414bfc09fadfaa8e45 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 24 Aug 2023 18:33:45 +0200 Subject: [PATCH 031/315] adding OnyxUpdatesFromServer object --- src/types/onyx/OnyxUpdatesFromServer.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/types/onyx/OnyxUpdatesFromServer.ts diff --git a/src/types/onyx/OnyxUpdatesFromServer.ts b/src/types/onyx/OnyxUpdatesFromServer.ts new file mode 100644 index 000000000000..e510c3d75c4a --- /dev/null +++ b/src/types/onyx/OnyxUpdatesFromServer.ts @@ -0,0 +1,20 @@ +import { OnyxUpdate } from "react-native-onyx"; +import Request from "./Request"; +import Response from "./Response"; + + +type OnyxUpdateFromServerData = { + request?: Request; + response?: Response; + updates?: OnyxUpdate[]; +} + + +type OnyxUpdateFromServer = { + lastUpdateID: number; + previousUpdateID: number; + type: 'HTTPS' | 'PUSHER' + data: OnyxUpdateFromServerData +}; + +export default OnyxUpdateFromServer; \ No newline at end of file From 85b4ef07ea5f628fae4075991c4903a507951c0a Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 24 Aug 2023 18:36:24 +0200 Subject: [PATCH 032/315] renaming and changing object in onyxKeys --- src/ONYXKEYS.ts | 2 +- src/types/onyx/OnyxUpdatesFromServer.ts | 8 ++++---- src/types/onyx/index.ts | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index d4cb591c704d..716e3288ebcc 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -350,7 +350,7 @@ type OnyxValues = { [ONYXKEYS.SELECTED_TAB]: string; [ONYXKEYS.RECEIPT_MODAL]: OnyxTypes.ReceiptModal; [ONYXKEYS.MAPBOX_ACCESS_TOKEN]: OnyxTypes.MapboxAccessToken; - [ONYXKEYS.ONYX_UPDATES_FROM_SERVER]: any; + [ONYXKEYS.ONYX_UPDATES_FROM_SERVER]: OnyxTypes.OnyxUpdatesFromServer; [ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT]: number; // Collections diff --git a/src/types/onyx/OnyxUpdatesFromServer.ts b/src/types/onyx/OnyxUpdatesFromServer.ts index e510c3d75c4a..22bf42b38706 100644 --- a/src/types/onyx/OnyxUpdatesFromServer.ts +++ b/src/types/onyx/OnyxUpdatesFromServer.ts @@ -3,18 +3,18 @@ import Request from "./Request"; import Response from "./Response"; -type OnyxUpdateFromServerData = { +type OnyxUpdatesFromServerData = { request?: Request; response?: Response; updates?: OnyxUpdate[]; } -type OnyxUpdateFromServer = { +type OnyxUpdatesFromServer = { lastUpdateID: number; previousUpdateID: number; type: 'HTTPS' | 'PUSHER' - data: OnyxUpdateFromServerData + data: OnyxUpdatesFromServerData }; -export default OnyxUpdateFromServer; \ No newline at end of file +export default OnyxUpdatesFromServer; \ No newline at end of file diff --git a/src/types/onyx/index.ts b/src/types/onyx/index.ts index e7ab360551c5..7733b27138b0 100644 --- a/src/types/onyx/index.ts +++ b/src/types/onyx/index.ts @@ -32,6 +32,7 @@ import ReimbursementAccountDraft from './ReimbursementAccountDraft'; import WalletTransfer from './WalletTransfer'; import ReceiptModal from './ReceiptModal'; import MapboxAccessToken from './MapboxAccessToken'; +import OnyxUpdatesFromServer from './OnyxUpdatesFromServer'; import Download from './Download'; import PolicyMember from './PolicyMember'; @@ -89,4 +90,5 @@ export type { Transaction, Form, AddDebitCardForm, + OnyxUpdatesFromServer, }; From 42555c1051e0655870f4dee06dca307b6b004cab Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 24 Aug 2023 18:37:41 +0200 Subject: [PATCH 033/315] renaming property to updates --- src/libs/actions/OnyxUpdateManager.js | 12 ++++++------ src/types/onyx/OnyxUpdatesFromServer.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 039f89e146c3..1ae1343dc79f 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -52,15 +52,15 @@ function applyHTTPSOnyxUpdates({request, responseData}) { /** * @param {Object} data - * @param {Object} data.multipleEvents + * @param {Object} data.updates * @returns {Promise} */ -function applyPusherOnyxUpdates({multipleEvents}) { +function applyPusherOnyxUpdates({updates}) { console.debug('[OnyxUpdateManager] Applying pusher update'); const pusherEventPromises = _.reduce( - multipleEvents, - (result, multipleEvent) => { - result.push(PusherUtils.triggerMultiEventHandler(multipleEvent.eventType, multipleEvent.data)); + updates, + (result, update) => { + result.push(PusherUtils.triggerMultiEventHandler(update.eventType, update.data)); return result; }, [], @@ -76,7 +76,7 @@ function applyPusherOnyxUpdates({multipleEvents}) { * @param {Object} updateParams.data * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' - * @param {Object} [updateParams.data.multipleEvents] Exists if updateParams.type === 'pusher' + * @param {Object} [updateParams.data.updates] Exists if updateParams.type === 'pusher' * @returns {Promise} */ function applyOnyxUpdates({type, data}) { diff --git a/src/types/onyx/OnyxUpdatesFromServer.ts b/src/types/onyx/OnyxUpdatesFromServer.ts index 22bf42b38706..2e55d40b9c87 100644 --- a/src/types/onyx/OnyxUpdatesFromServer.ts +++ b/src/types/onyx/OnyxUpdatesFromServer.ts @@ -13,7 +13,7 @@ type OnyxUpdatesFromServerData = { type OnyxUpdatesFromServer = { lastUpdateID: number; previousUpdateID: number; - type: 'HTTPS' | 'PUSHER' + type: 'https' | 'pusher' data: OnyxUpdatesFromServerData }; From 4d02eb5b37e46801d0f6c49fc06a2ec6a3c69c81 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 24 Aug 2023 18:38:42 +0200 Subject: [PATCH 034/315] renaming multipleEvents to updates --- src/libs/actions/OnyxUpdates.js | 2 +- src/libs/actions/User.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/OnyxUpdates.js b/src/libs/actions/OnyxUpdates.js index f5b7adeab23c..8834fc4e34f7 100644 --- a/src/libs/actions/OnyxUpdates.js +++ b/src/libs/actions/OnyxUpdates.js @@ -7,7 +7,7 @@ import ONYXKEYS from '../../ONYXKEYS'; * @param {Object} updateParams.data * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' * @param {Object} [updateParams.data.responseData] Exists if updateParams.type === 'https' - * @param {Object} [updateParams.data.multipleEvents] Exists if updateParams.type === 'pusher' + * @param {Object} [updateParams.data.updates] Exists if updateParams.type === 'pusher' * @param {Number} [lastUpdateID] * @param {Number} [previousUpdateID] */ diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index b5429ae0893d..940ed780f655 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -567,7 +567,7 @@ function subscribeToUserEvents() { { type: CONST.ONYX_UPDATE_TYPES.PUSHER, data: { - multipleEvents: pushJSON.updates, + updates: pushJSON.updates, }, }, Number(pushJSON.lastUpdateID || 0), From 7bd9bdb6cdebbbd78f66be666a63e1cc53bea26f Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Fri, 25 Aug 2023 04:07:24 +0500 Subject: [PATCH 035/315] fix: maintain consistent topbar colour on login --- src/components/CustomStatusBar/index.js | 9 +++++++-- src/libs/Navigation/NavigationRoot.js | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/components/CustomStatusBar/index.js b/src/components/CustomStatusBar/index.js index 76752cb549e1..85eda64bcb18 100644 --- a/src/components/CustomStatusBar/index.js +++ b/src/components/CustomStatusBar/index.js @@ -1,11 +1,16 @@ import React, {useEffect} from 'react'; import StatusBar from '../../libs/StatusBar'; +import Navigation, {navigationRef} from '../../libs/Navigation/Navigation'; import themeColors from '../../styles/themes/default'; function CustomStatusBar() { useEffect(() => { - StatusBar.setBarStyle('light-content', true); - StatusBar.setBackgroundColor(themeColors.appBG); + Navigation.isNavigationReady().then(() => { + const currentRoute = navigationRef.getCurrentRoute(); + const currentScreenBackgroundColor = themeColors.PAGE_BACKGROUND_COLORS[currentRoute.name] || themeColors.appBG; + StatusBar.setBarStyle('light-content', true); + StatusBar.setBackgroundColor(currentScreenBackgroundColor); + }); }, []); return ; } diff --git a/src/libs/Navigation/NavigationRoot.js b/src/libs/Navigation/NavigationRoot.js index 23c320eb991c..4dc4acd677fe 100644 --- a/src/libs/Navigation/NavigationRoot.js +++ b/src/libs/Navigation/NavigationRoot.js @@ -79,7 +79,12 @@ function NavigationRoot(props) { const updateStatusBarBackgroundColor = (color) => StatusBar.setBackgroundColor(color); useAnimatedReaction( () => statusBarAnimation.value, - () => { + (current, previous) => { + // Do not run if either of the animated value is null + // or previous animated value is greater than or equal to the current one + if ([current, previous].includes(null) || current <= previous) { + return; + } const color = interpolateColor(statusBarAnimation.value, [0, 1], [prevStatusBarBackgroundColor.current, statusBarBackgroundColor.current]); runOnJS(updateStatusBarBackgroundColor)(color); }, From c736a71601586466fc9673f39249f41441d4bf59 Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Fri, 25 Aug 2023 04:21:12 +0500 Subject: [PATCH 036/315] fix: prettier --- src/components/CustomStatusBar/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CustomStatusBar/index.js b/src/components/CustomStatusBar/index.js index 85eda64bcb18..342796ede969 100644 --- a/src/components/CustomStatusBar/index.js +++ b/src/components/CustomStatusBar/index.js @@ -7,9 +7,9 @@ function CustomStatusBar() { useEffect(() => { Navigation.isNavigationReady().then(() => { const currentRoute = navigationRef.getCurrentRoute(); - const currentScreenBackgroundColor = themeColors.PAGE_BACKGROUND_COLORS[currentRoute.name] || themeColors.appBG; + const currentScreenBackgroundColor = themeColors.PAGE_BACKGROUND_COLORS[currentRoute.name] || themeColors.appBG; StatusBar.setBarStyle('light-content', true); - StatusBar.setBackgroundColor(currentScreenBackgroundColor); + StatusBar.setBackgroundColor(currentScreenBackgroundColor); }); }, []); return ; From 18cec5e3bdb26d65d72c3215de07af6431068967 Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Fri, 25 Aug 2023 04:33:23 +0500 Subject: [PATCH 037/315] fix: failing tests --- src/components/CustomStatusBar/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/CustomStatusBar/index.js b/src/components/CustomStatusBar/index.js index 342796ede969..4d2aa919e73b 100644 --- a/src/components/CustomStatusBar/index.js +++ b/src/components/CustomStatusBar/index.js @@ -7,7 +7,10 @@ function CustomStatusBar() { useEffect(() => { Navigation.isNavigationReady().then(() => { const currentRoute = navigationRef.getCurrentRoute(); - const currentScreenBackgroundColor = themeColors.PAGE_BACKGROUND_COLORS[currentRoute.name] || themeColors.appBG; + let currentScreenBackgroundColor = themeColors.appBG; + if (currentRoute && 'name' in currentRoute && currentRoute.name in themeColors.PAGE_BACKGROUND_COLORS) { + currentScreenBackgroundColor = themeColors.PAGE_BACKGROUND_COLORS[currentRoute.name]; + } StatusBar.setBarStyle('light-content', true); StatusBar.setBackgroundColor(currentScreenBackgroundColor); }); From 3d9b6b4c0162aafb4c4c61a632a26d2cef51a749 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 28 Aug 2023 10:28:45 +0200 Subject: [PATCH 038/315] [TS migration] Migrate 'getTooltipStyles.js' style to TypeScript --- .../Tooltip/TooltipRenderedOnPageBody.js | 2 +- ...etTooltipStyles.js => getTooltipStyles.ts} | 98 ++++++++++--------- 2 files changed, 53 insertions(+), 47 deletions(-) rename src/styles/{getTooltipStyles.js => getTooltipStyles.ts} (78%) diff --git a/src/components/Tooltip/TooltipRenderedOnPageBody.js b/src/components/Tooltip/TooltipRenderedOnPageBody.js index 8c717e17c424..724a56162f86 100644 --- a/src/components/Tooltip/TooltipRenderedOnPageBody.js +++ b/src/components/Tooltip/TooltipRenderedOnPageBody.js @@ -86,6 +86,7 @@ const TooltipRenderedOnPageBody = (props) => { const {animationStyle, rootWrapperStyle, textStyle, pointerWrapperStyle, pointerStyle} = useMemo( () => getTooltipStyles( + rootWrapper.current, props.animation, props.windowWidth, props.xOffset, @@ -97,7 +98,6 @@ const TooltipRenderedOnPageBody = (props) => { wrapperMeasuredHeight, props.shiftHorizontal, props.shiftVertical, - rootWrapper.current, ), [ props.animation, diff --git a/src/styles/getTooltipStyles.js b/src/styles/getTooltipStyles.ts similarity index 78% rename from src/styles/getTooltipStyles.js rename to src/styles/getTooltipStyles.ts index bc5fcfe807aa..bbc6ab9942e8 100644 --- a/src/styles/getTooltipStyles.js +++ b/src/styles/getTooltipStyles.ts @@ -1,3 +1,5 @@ +import {CSSProperties, RefObject} from 'react'; +import {TextStyle, View, ViewStyle} from 'react-native'; import spacing from './utilities/spacing'; import styles from './styles'; import colors from './colors'; @@ -6,30 +8,29 @@ import fontFamily from './fontFamily'; import variables from './variables'; import roundToNearestMultipleOfFour from './roundToNearestMultipleOfFour'; -// This defines the proximity with the edge of the window in which tooltips should not be displayed. -// If a tooltip is too close to the edge of the screen, we'll shift it towards the center. +/** This defines the proximity with the edge of the window in which tooltips should not be displayed. + * If a tooltip is too close to the edge of the screen, we'll shift it towards the center. */ const GUTTER_WIDTH = variables.gutterWidth; -// The height of a tooltip pointer +/** The height of a tooltip pointer */ const POINTER_HEIGHT = 4; -// The width of a tooltip pointer +/** The width of a tooltip pointer */ const POINTER_WIDTH = 12; /** * Compute the amount the tooltip needs to be horizontally shifted in order to keep it from displaying in the gutters. * - * @param {Number} windowWidth - The width of the window. - * @param {Number} xOffset - The distance between the left edge of the window + * @param windowWidth - The width of the window. + * @param xOffset - The distance between the left edge of the window * and the left edge of the wrapped component. - * @param {Number} componentWidth - The width of the wrapped component. - * @param {Number} tooltipWidth - The width of the tooltip itself. - * @param {Number} [manualShiftHorizontal] - Any additional amount to manually shift the tooltip to the left or right. + * @param componentWidth - The width of the wrapped component. + * @param tooltipWidth - The width of the tooltip itself. + * @param [manualShiftHorizontal] - Any additional amount to manually shift the tooltip to the left or right. * A positive value shifts it to the right, * and a negative value shifts it to the left. - * @returns {Number} */ -function computeHorizontalShift(windowWidth, xOffset, componentWidth, tooltipWidth, manualShiftHorizontal) { +function computeHorizontalShift(windowWidth: number, xOffset: number, componentWidth: number, tooltipWidth: number, manualShiftHorizontal: number): number { // First find the left and right edges of the tooltip (by default, it is centered on the component). const componentCenter = xOffset + componentWidth / 2 + manualShiftHorizontal; const tooltipLeftEdge = componentCenter - tooltipWidth / 2; @@ -61,16 +62,15 @@ function computeHorizontalShift(windowWidth, xOffset, componentWidth, tooltipWid * | | * |_ _ _ _ _| * - * @param {Number} xOffset - The distance between the left edge of the window + * @param xOffset - The distance between the left edge of the window * and the left edge of the wrapped component. - * @param {Number} yOffset - The distance between the top edge of the window + * @param yOffset - The distance between the top edge of the window * and the top edge of the wrapped component. - * @param {Element} [tooltip] - The reference to the tooltip's root element - * @param {Number} tooltipTargetWidth - The width of the tooltip's target - * @param {Number} tooltipTargetHeight - The height of the tooltip's target - * @returns {Boolean} + * @param [tooltip] - The reference to the tooltip's root element + * @param tooltipTargetWidth - The width of the tooltip's target + * @param tooltipTargetHeight - The height of the tooltip's target */ -function isOverlappingAtTop(xOffset, yOffset, tooltip, tooltipTargetWidth, tooltipTargetHeight) { +function isOverlappingAtTop(tooltip: RefObject, xOffset: number, yOffset: number, tooltipTargetWidth: number, tooltipTargetHeight: number) { if (typeof document.elementFromPoint !== 'function') { return false; } @@ -79,10 +79,9 @@ function isOverlappingAtTop(xOffset, yOffset, tooltip, tooltipTargetWidth, toolt // in case the target has a border radius or is a multiline text. const targetCenterX = xOffset + tooltipTargetWidth / 2; const elementAtTargetCenterX = document.elementFromPoint(targetCenterX, yOffset); - const tooltipRef = (tooltip && tooltip.current) || tooltip; // Ensure it's not the already rendered element of this very tooltip, so the tooltip doesn't try to "avoid" itself - if (!elementAtTargetCenterX || (tooltipRef && tooltipRef.contains(elementAtTargetCenterX))) { + if (!elementAtTargetCenterX) { return false; } @@ -95,42 +94,49 @@ function isOverlappingAtTop(xOffset, yOffset, tooltip, tooltipTargetWidth, toolt return isOverlappingAtTargetCenterX; } +type TooltipStyles = { + animationStyle: ViewStyle; + rootWrapperStyle: Omit | Pick; + textStyle: TextStyle; + pointerWrapperStyle: Omit | Pick; + pointerStyle: ViewStyle; +}; + /** * Generate styles for the tooltip component. * - * @param {Number} currentSize - The current size of the tooltip used in the scaling animation. - * @param {Number} windowWidth - The width of the window. - * @param {Number} xOffset - The distance between the left edge of the window + * @param tooltip - The reference to the tooltip's root element + * @param currentSize - The current size of the tooltip used in the scaling animation. + * @param windowWidth - The width of the window. + * @param xOffset - The distance between the left edge of the window * and the left edge of the wrapped component. - * @param {Number} yOffset - The distance between the top edge of the window + * @param yOffset - The distance between the top edge of the window * and the top edge of the wrapped component. - * @param {Number} tooltipTargetWidth - The width of the tooltip's target - * @param {Number} tooltipTargetHeight - The height of the tooltip's target - * @param {Number} maxWidth - The tooltip's max width. - * @param {Number} tooltipContentWidth - The tooltip's inner content measured width. - * @param {Number} tooltipWrapperHeight - The tooltip's wrapper measured height. - * @param {Number} [manualShiftHorizontal] - Any additional amount to manually shift the tooltip to the left or right. + * @param tooltipTargetWidth - The width of the tooltip's target + * @param tooltipTargetHeight - The height of the tooltip's target + * @param maxWidth - The tooltip's max width. + * @param tooltipContentWidth - The tooltip's inner content measured width. + * @param tooltipWrapperHeight - The tooltip's wrapper measured height. + * @param [manualShiftHorizontal] - Any additional amount to manually shift the tooltip to the left or right. * A positive value shifts it to the right, * and a negative value shifts it to the left. - * @param {Number} [manualShiftVertical] - Any additional amount to manually shift the tooltip up or down. + * @param [manualShiftVertical] - Any additional amount to manually shift the tooltip up or down. * A positive value shifts it down, and a negative value shifts it up. - * @param {Element} tooltip - The reference to the tooltip's root element - * @returns {Object} */ export default function getTooltipStyles( - currentSize, - windowWidth, - xOffset, - yOffset, - tooltipTargetWidth, - tooltipTargetHeight, - maxWidth, - tooltipContentWidth, - tooltipWrapperHeight, + tooltip: RefObject, + currentSize: number, + windowWidth: number, + xOffset: number, + yOffset: number, + tooltipTargetWidth: number, + tooltipTargetHeight: number, + maxWidth: number, + tooltipContentWidth: number, + tooltipWrapperHeight: number, manualShiftHorizontal = 0, manualShiftVertical = 0, - tooltip, -) { +): TooltipStyles { const tooltipVerticalPadding = spacing.pv1; // We calculate tooltip width based on the tooltip's content width @@ -141,7 +147,7 @@ export default function getTooltipStyles( const isTooltipSizeReady = tooltipWidth !== undefined && tooltipHeight !== undefined; - // Set the scale to 1 to be able to measure the toolip size correctly when it's not ready yet. + // Set the scale to 1 to be able to measure the tooltip size correctly when it's not ready yet. let scale = 1; let shouldShowBelow = false; let horizontalShift = 0; @@ -157,7 +163,7 @@ export default function getTooltipStyles( // If either a tooltip will try to render within GUTTER_WIDTH logical pixels of the top of the screen, // Or the wrapped component is overlapping at top-center with another element // we'll display it beneath its wrapped component rather than above it as usual. - shouldShowBelow = yOffset - tooltipHeight < GUTTER_WIDTH || isOverlappingAtTop(xOffset, yOffset, tooltip, tooltipTargetWidth, tooltipTargetHeight); + shouldShowBelow = yOffset - tooltipHeight < GUTTER_WIDTH || isOverlappingAtTop(tooltip, xOffset, yOffset, tooltipTargetWidth, tooltipTargetHeight); // When the tooltip size is ready, we can start animating the scale. scale = currentSize; From 5a3d97b4c32b563360281ad34570c1a5989c47f5 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 28 Aug 2023 12:31:13 +0200 Subject: [PATCH 039/315] Improve TooltipStyles types --- src/styles/getTooltipStyles.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/styles/getTooltipStyles.ts b/src/styles/getTooltipStyles.ts index bbc6ab9942e8..bf3091bc49b3 100644 --- a/src/styles/getTooltipStyles.ts +++ b/src/styles/getTooltipStyles.ts @@ -70,7 +70,7 @@ function computeHorizontalShift(windowWidth: number, xOffset: number, componentW * @param tooltipTargetWidth - The width of the tooltip's target * @param tooltipTargetHeight - The height of the tooltip's target */ -function isOverlappingAtTop(tooltip: RefObject, xOffset: number, yOffset: number, tooltipTargetWidth: number, tooltipTargetHeight: number) { +function isOverlappingAtTop(xOffset: number, yOffset: number, tooltipTargetWidth: number, tooltipTargetHeight: number) { if (typeof document.elementFromPoint !== 'function') { return false; } @@ -96,9 +96,9 @@ function isOverlappingAtTop(tooltip: RefObject, xOffset: number, yOffset: type TooltipStyles = { animationStyle: ViewStyle; - rootWrapperStyle: Omit | Pick; + rootWrapperStyle: ViewStyle | CSSProperties; textStyle: TextStyle; - pointerWrapperStyle: Omit | Pick; + pointerWrapperStyle: ViewStyle | CSSProperties; pointerStyle: ViewStyle; }; @@ -163,7 +163,7 @@ export default function getTooltipStyles( // If either a tooltip will try to render within GUTTER_WIDTH logical pixels of the top of the screen, // Or the wrapped component is overlapping at top-center with another element // we'll display it beneath its wrapped component rather than above it as usual. - shouldShowBelow = yOffset - tooltipHeight < GUTTER_WIDTH || isOverlappingAtTop(tooltip, xOffset, yOffset, tooltipTargetWidth, tooltipTargetHeight); + shouldShowBelow = yOffset - tooltipHeight < GUTTER_WIDTH || isOverlappingAtTop(xOffset, yOffset, tooltipTargetWidth, tooltipTargetHeight); // When the tooltip size is ready, we can start animating the scale. scale = currentSize; From 7c4ed797ce3a5676a9fb76489173caf6373922f0 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 28 Aug 2023 12:32:39 +0200 Subject: [PATCH 040/315] Remove unused variable --- src/components/Tooltip/TooltipRenderedOnPageBody.js | 1 - src/styles/getTooltipStyles.ts | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/Tooltip/TooltipRenderedOnPageBody.js b/src/components/Tooltip/TooltipRenderedOnPageBody.js index 724a56162f86..67b3e39b264f 100644 --- a/src/components/Tooltip/TooltipRenderedOnPageBody.js +++ b/src/components/Tooltip/TooltipRenderedOnPageBody.js @@ -86,7 +86,6 @@ const TooltipRenderedOnPageBody = (props) => { const {animationStyle, rootWrapperStyle, textStyle, pointerWrapperStyle, pointerStyle} = useMemo( () => getTooltipStyles( - rootWrapper.current, props.animation, props.windowWidth, props.xOffset, diff --git a/src/styles/getTooltipStyles.ts b/src/styles/getTooltipStyles.ts index bf3091bc49b3..d96cfe12f346 100644 --- a/src/styles/getTooltipStyles.ts +++ b/src/styles/getTooltipStyles.ts @@ -1,5 +1,5 @@ -import {CSSProperties, RefObject} from 'react'; -import {TextStyle, View, ViewStyle} from 'react-native'; +import {CSSProperties} from 'react'; +import {TextStyle, ViewStyle} from 'react-native'; import spacing from './utilities/spacing'; import styles from './styles'; import colors from './colors'; @@ -124,7 +124,6 @@ type TooltipStyles = { * A positive value shifts it down, and a negative value shifts it up. */ export default function getTooltipStyles( - tooltip: RefObject, currentSize: number, windowWidth: number, xOffset: number, From 8f2a22c7c8ee62d5c8b35a9d3e71b311e8908d87 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 28 Aug 2023 16:16:53 +0200 Subject: [PATCH 041/315] Improve types --- src/components/Tooltip/TooltipRenderedOnPageBody.js | 1 + src/styles/getTooltipStyles.ts | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/Tooltip/TooltipRenderedOnPageBody.js b/src/components/Tooltip/TooltipRenderedOnPageBody.js index 67b3e39b264f..724a56162f86 100644 --- a/src/components/Tooltip/TooltipRenderedOnPageBody.js +++ b/src/components/Tooltip/TooltipRenderedOnPageBody.js @@ -86,6 +86,7 @@ const TooltipRenderedOnPageBody = (props) => { const {animationStyle, rootWrapperStyle, textStyle, pointerWrapperStyle, pointerStyle} = useMemo( () => getTooltipStyles( + rootWrapper.current, props.animation, props.windowWidth, props.xOffset, diff --git a/src/styles/getTooltipStyles.ts b/src/styles/getTooltipStyles.ts index d96cfe12f346..5bdedbd7b0c0 100644 --- a/src/styles/getTooltipStyles.ts +++ b/src/styles/getTooltipStyles.ts @@ -1,5 +1,5 @@ import {CSSProperties} from 'react'; -import {TextStyle, ViewStyle} from 'react-native'; +import {TextStyle, View, ViewStyle} from 'react-native'; import spacing from './utilities/spacing'; import styles from './styles'; import colors from './colors'; @@ -70,7 +70,7 @@ function computeHorizontalShift(windowWidth: number, xOffset: number, componentW * @param tooltipTargetWidth - The width of the tooltip's target * @param tooltipTargetHeight - The height of the tooltip's target */ -function isOverlappingAtTop(xOffset: number, yOffset: number, tooltipTargetWidth: number, tooltipTargetHeight: number) { +function isOverlappingAtTop(tooltip: View | HTMLDivElement, xOffset: number, yOffset: number, tooltipTargetWidth: number, tooltipTargetHeight: number) { if (typeof document.elementFromPoint !== 'function') { return false; } @@ -81,7 +81,7 @@ function isOverlappingAtTop(xOffset: number, yOffset: number, tooltipTargetWidth const elementAtTargetCenterX = document.elementFromPoint(targetCenterX, yOffset); // Ensure it's not the already rendered element of this very tooltip, so the tooltip doesn't try to "avoid" itself - if (!elementAtTargetCenterX) { + if (!elementAtTargetCenterX || ('contains' in tooltip && tooltip.contains(elementAtTargetCenterX))) { return false; } @@ -124,6 +124,7 @@ type TooltipStyles = { * A positive value shifts it down, and a negative value shifts it up. */ export default function getTooltipStyles( + tooltip: View | HTMLDivElement, currentSize: number, windowWidth: number, xOffset: number, @@ -162,7 +163,7 @@ export default function getTooltipStyles( // If either a tooltip will try to render within GUTTER_WIDTH logical pixels of the top of the screen, // Or the wrapped component is overlapping at top-center with another element // we'll display it beneath its wrapped component rather than above it as usual. - shouldShowBelow = yOffset - tooltipHeight < GUTTER_WIDTH || isOverlappingAtTop(xOffset, yOffset, tooltipTargetWidth, tooltipTargetHeight); + shouldShowBelow = yOffset - tooltipHeight < GUTTER_WIDTH || isOverlappingAtTop(tooltip, xOffset, yOffset, tooltipTargetWidth, tooltipTargetHeight); // When the tooltip size is ready, we can start animating the scale. scale = currentSize; From 242c72581e95a69b90f4612e93277dfa34a7adee Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 28 Aug 2023 18:53:06 +0200 Subject: [PATCH 042/315] [TS migration] Migrate 'hashCode.js' lib to TypeScript --- src/libs/{hashCode.js => hashCode.ts} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename src/libs/{hashCode.js => hashCode.ts} (80%) diff --git a/src/libs/hashCode.js b/src/libs/hashCode.ts similarity index 80% rename from src/libs/hashCode.js rename to src/libs/hashCode.ts index a95d0787a6e3..bb0522c25de0 100644 --- a/src/libs/hashCode.js +++ b/src/libs/hashCode.ts @@ -2,11 +2,11 @@ /** * Simple string hashing function obtained from: https://stackoverflow.com/a/8831937/16434681 * Returns a hash code from a string - * @param {String} str The string to hash. - * @return {Number} A 32bit integer (can be negative) + * @param str The string to hash. + * @return A 32bit integer (can be negative) * @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/ */ -function hashCode(str) { +function hashCode(str: string): number { let hash = 0; for (let i = 0, len = str.length; i < len; i++) { const chr = str.charCodeAt(i); From 0e4c49c59e9d4612a2d0acad08e8c88a08a11b19 Mon Sep 17 00:00:00 2001 From: Mahesh Vagicherla Date: Tue, 29 Aug 2023 00:49:55 +0530 Subject: [PATCH 043/315] clear callbacks when closing the account --- src/libs/actions/User.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index b77c5b278bc9..eca1fa8a496e 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -19,6 +19,7 @@ import * as ErrorUtils from '../ErrorUtils'; import * as Session from './Session'; import * as PersonalDetails from './PersonalDetails'; import * as OnyxUpdates from './OnyxUpdates'; +import redirectToSignIn from './SignInRedirect'; let currentUserAccountID = ''; let currentEmail = ''; @@ -70,6 +71,8 @@ function closeAccount(message) { ], }, ); + // Clear all the listeners/callback that are registered while logged-in + redirectToSignIn(); } /** From c5d726476955438a0b8340ce11723537031614ee Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Tue, 29 Aug 2023 10:42:43 +0200 Subject: [PATCH 044/315] prettier --- src/types/onyx/OnyxUpdatesFromServer.ts | 20 +++++++++----------- src/types/onyx/Request.ts | 2 +- src/types/onyx/Response.ts | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/types/onyx/OnyxUpdatesFromServer.ts b/src/types/onyx/OnyxUpdatesFromServer.ts index 2e55d40b9c87..c2c76afa0aa8 100644 --- a/src/types/onyx/OnyxUpdatesFromServer.ts +++ b/src/types/onyx/OnyxUpdatesFromServer.ts @@ -1,20 +1,18 @@ -import { OnyxUpdate } from "react-native-onyx"; -import Request from "./Request"; -import Response from "./Response"; - +import {OnyxUpdate} from 'react-native-onyx'; +import Request from './Request'; +import Response from './Response'; type OnyxUpdatesFromServerData = { request?: Request; response?: Response; updates?: OnyxUpdate[]; -} - +}; type OnyxUpdatesFromServer = { - lastUpdateID: number; - previousUpdateID: number; - type: 'https' | 'pusher' - data: OnyxUpdatesFromServerData + lastUpdateID: number | string; + previousUpdateID: number | string; + type: 'https' | 'pusher'; + data: OnyxUpdatesFromServerData; }; -export default OnyxUpdatesFromServer; \ No newline at end of file +export default OnyxUpdatesFromServer; diff --git a/src/types/onyx/Request.ts b/src/types/onyx/Request.ts index cc57c9410e30..1df20cfb28fe 100644 --- a/src/types/onyx/Request.ts +++ b/src/types/onyx/Request.ts @@ -1,4 +1,4 @@ -import { OnyxUpdate } from "react-native-onyx"; +import {OnyxUpdate} from 'react-native-onyx'; type Request = { command?: string; diff --git a/src/types/onyx/Response.ts b/src/types/onyx/Response.ts index 01956adffc87..27077cc9bc74 100644 --- a/src/types/onyx/Response.ts +++ b/src/types/onyx/Response.ts @@ -1,4 +1,4 @@ -import { OnyxUpdate } from "react-native-onyx"; +import {OnyxUpdate} from 'react-native-onyx'; type Request = { previousUpdateID?: number; From 473d5df1dbdd6c3019c07bc25ae8511ae046342b Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Tue, 29 Aug 2023 10:43:43 +0200 Subject: [PATCH 045/315] renaming property --- ios/NewExpensify.xcodeproj/project.pbxproj | 8 ++++++-- src/libs/actions/OnyxUpdateManager.js | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index d87226269a8b..6aeb6cd1cf7d 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -29,7 +29,7 @@ 70CF6E82262E297300711ADC /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 70CF6E81262E297300711ADC /* BootSplash.storyboard */; }; BDB853621F354EBB84E619C2 /* ExpensifyNewKansas-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */; }; DD79042B2792E76D004484B4 /* RCTBootSplash.m in Sources */ = {isa = PBXBuildFile; fileRef = DD79042A2792E76D004484B4 /* RCTBootSplash.m */; }; - E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; + E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */ = {isa = PBXBuildFile; }; E9DF872D2525201700607FDC /* AirshipConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = E9DF872C2525201700607FDC /* AirshipConfig.plist */; }; ED222ED90E074A5481A854FA /* ExpensifyNeue-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */; }; F0C450EA2705020500FD2970 /* colors.json in Resources */ = {isa = PBXBuildFile; fileRef = F0C450E92705020500FD2970 /* colors.json */; }; @@ -112,7 +112,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */, + E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */, 5A464BC8112CDB1DE1E38F1C /* libPods-NewExpensify.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -701,6 +701,7 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_BITCODE = NO; INFOPLIST_FILE = "$(SRCROOT)/NewExpensify/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -714,6 +715,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev; PRODUCT_NAME = "New Expensify Dev"; PROVISIONING_PROFILE_SPECIFIER = expensify_chat_dev; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = expensify_chat_dev; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -733,6 +735,7 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; INFOPLIST_FILE = NewExpensify/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -745,6 +748,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev; PRODUCT_NAME = "New Expensify Dev"; PROVISIONING_PROFILE_SPECIFIER = expensify_chat_dev; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = expensify_chat_dev; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 1ae1343dc79f..358be3c07690 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -108,7 +108,7 @@ export default () => { // Since people will have migrations hapening in their accounts while they use the app, we don't want to trigger // a full ReconnectApp and then trigger a GetOnyxUpdates. Let's use this as a control variable until we enable // the beta to all users. - let updateEnablesBeta = false; + let isUserGettingReliableUpdatesForTheVeryFirstTime = false; const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; @@ -124,12 +124,12 @@ export default () => { ) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); App.reconnectApp(); - updateEnablesBeta = true; + isUserGettingReliableUpdatesForTheVeryFirstTime = true; } // If the previous update from the server does not match the last update the client got, then the client is missing some updates. // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. - if (!updateEnablesBeta && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { + if (!isUserGettingReliableUpdatesForTheVeryFirstTime && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { console.debug(`[OnyxUpdateManager] Client is behind the server by ${previousUpdateIDFromServer - lastUpdateIDAppliedToClient} so fetching incremental updates`); Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { lastUpdateIDFromServer, From 424944dbc91757aa3ddcf1567db762de7778ddd9 Mon Sep 17 00:00:00 2001 From: Bartosz Grajdek Date: Tue, 29 Aug 2023 11:46:06 +0200 Subject: [PATCH 046/315] [TS migration] Migrate 'shouldRenderOffscreen' lib to TypeScript --- src/libs/shouldRenderOffscreen/index.android.js | 2 -- src/libs/shouldRenderOffscreen/index.android.ts | 6 ++++++ src/libs/shouldRenderOffscreen/index.js | 1 - src/libs/shouldRenderOffscreen/index.ts | 5 +++++ src/libs/shouldRenderOffscreen/types.ts | 3 +++ 5 files changed, 14 insertions(+), 3 deletions(-) delete mode 100644 src/libs/shouldRenderOffscreen/index.android.js create mode 100644 src/libs/shouldRenderOffscreen/index.android.ts delete mode 100644 src/libs/shouldRenderOffscreen/index.js create mode 100644 src/libs/shouldRenderOffscreen/index.ts create mode 100644 src/libs/shouldRenderOffscreen/types.ts diff --git a/src/libs/shouldRenderOffscreen/index.android.js b/src/libs/shouldRenderOffscreen/index.android.js deleted file mode 100644 index c91ffa15894d..000000000000 --- a/src/libs/shouldRenderOffscreen/index.android.js +++ /dev/null @@ -1,2 +0,0 @@ -// Rendering offscreen on Android allows it to apply opacity to stacked components correctly. -export default true; diff --git a/src/libs/shouldRenderOffscreen/index.android.ts b/src/libs/shouldRenderOffscreen/index.android.ts new file mode 100644 index 000000000000..fef74bdf1829 --- /dev/null +++ b/src/libs/shouldRenderOffscreen/index.android.ts @@ -0,0 +1,6 @@ +import ShouldRenderOffscreen from './types'; +// Rendering offscreen on Android allows it to apply opacity to stacked components correctly. + +const shouldRenderOffscreen: ShouldRenderOffscreen = true; + +export default shouldRenderOffscreen; diff --git a/src/libs/shouldRenderOffscreen/index.js b/src/libs/shouldRenderOffscreen/index.js deleted file mode 100644 index 33136544dba2..000000000000 --- a/src/libs/shouldRenderOffscreen/index.js +++ /dev/null @@ -1 +0,0 @@ -export default false; diff --git a/src/libs/shouldRenderOffscreen/index.ts b/src/libs/shouldRenderOffscreen/index.ts new file mode 100644 index 000000000000..eadcc44814f9 --- /dev/null +++ b/src/libs/shouldRenderOffscreen/index.ts @@ -0,0 +1,5 @@ +import ShouldRenderOffscreen from './types'; + +const shouldRenderOffscreen: ShouldRenderOffscreen = false; + +export default shouldRenderOffscreen; diff --git a/src/libs/shouldRenderOffscreen/types.ts b/src/libs/shouldRenderOffscreen/types.ts new file mode 100644 index 000000000000..63cd98eec31b --- /dev/null +++ b/src/libs/shouldRenderOffscreen/types.ts @@ -0,0 +1,3 @@ +type ShouldRenderOffscreen = boolean; + +export default ShouldRenderOffscreen; From 6a51999af2786b55aa202adb380f0314e274df33 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Tue, 29 Aug 2023 12:22:12 +0200 Subject: [PATCH 047/315] lint errors --- src/libs/actions/OnyxUpdateManager.js | 4 ++-- src/types/onyx/Response.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 358be3c07690..97456d8d704f 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -119,8 +119,8 @@ export default () => { if ( !lastUpdateIDAppliedToClient && previousUpdateIDFromServer > 0 && - (updateParams.type == CONST.ONYX_UPDATE_TYPES.PUSHER || - (updateParams.type == CONST.ONYX_UPDATE_TYPES.HTTPS && (updateParams.data.request.command !== 'OpenApp' || updateParams.data.request.command !== 'ReconnectApp'))) + (updateParams.type === CONST.ONYX_UPDATE_TYPES.PUSHER || + (updateParams.type === CONST.ONYX_UPDATE_TYPES.HTTPS && (updateParams.data.request.command !== 'OpenApp' || updateParams.data.request.command !== 'ReconnectApp'))) ) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); App.reconnectApp(); diff --git a/src/types/onyx/Response.ts b/src/types/onyx/Response.ts index 27077cc9bc74..d9395b6e8dab 100644 --- a/src/types/onyx/Response.ts +++ b/src/types/onyx/Response.ts @@ -1,6 +1,6 @@ import {OnyxUpdate} from 'react-native-onyx'; -type Request = { +type Response = { previousUpdateID?: number; lastUpdateID?: number; jsonCode?: number; From 184d2211653ab21c18dfcdb5e898b261f07f6c1b Mon Sep 17 00:00:00 2001 From: Bartosz Grajdek Date: Tue, 29 Aug 2023 13:28:34 +0200 Subject: [PATCH 048/315] Move comment --- src/libs/shouldRenderOffscreen/index.android.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/shouldRenderOffscreen/index.android.ts b/src/libs/shouldRenderOffscreen/index.android.ts index fef74bdf1829..bf2d9837086f 100644 --- a/src/libs/shouldRenderOffscreen/index.android.ts +++ b/src/libs/shouldRenderOffscreen/index.android.ts @@ -1,6 +1,6 @@ import ShouldRenderOffscreen from './types'; -// Rendering offscreen on Android allows it to apply opacity to stacked components correctly. +// Rendering offscreen on Android allows it to apply opacity to stacked components correctly. const shouldRenderOffscreen: ShouldRenderOffscreen = true; export default shouldRenderOffscreen; From 93d1e93a532186fc072f7378924aa6075cb531d6 Mon Sep 17 00:00:00 2001 From: Thiago Brezinski Date: Tue, 29 Aug 2023 13:06:36 +0100 Subject: [PATCH 049/315] fix(pronouns-page): pronouns displayed without search --- src/pages/settings/Profile/PronounsPage.js | 94 +++++++--------------- 1 file changed, 31 insertions(+), 63 deletions(-) diff --git a/src/pages/settings/Profile/PronounsPage.js b/src/pages/settings/Profile/PronounsPage.js index ce460bc30ff4..a37498783821 100644 --- a/src/pages/settings/Profile/PronounsPage.js +++ b/src/pages/settings/Profile/PronounsPage.js @@ -1,6 +1,6 @@ import _ from 'underscore'; import lodashGet from 'lodash/get'; -import React, {useState, useEffect, useCallback} from 'react'; +import React, {useState, useMemo} from 'react'; import withCurrentUserPersonalDetails, {withCurrentUserPersonalDetailsPropTypes, withCurrentUserPersonalDetailsDefaultProps} from '../../../components/withCurrentUserPersonalDetails'; import ScreenWrapper from '../../../components/ScreenWrapper'; import HeaderWithBackButton from '../../../components/HeaderWithBackButton'; @@ -23,31 +23,21 @@ const defaultProps = { ...withCurrentUserPersonalDetailsDefaultProps, }; -function PronounsPage(props) { - const [initiallyFocusedOption, setInitiallyFocusedOption] = useState({}); - const [searchValue, setSearchValue] = useState(''); - const [pronounsList, setPronounsList] = useState([]); +function PronounsPage({currentUserPersonalDetails, translate}) { + const currentPronouns = lodashGet(currentUserPersonalDetails, 'pronouns', ''); + const currentPronounsKey = currentPronouns.substring(CONST.PRONOUNS.PREFIX.length); + const currentPronounsText = _.chain(translate('pronouns')) + .find((_value, key) => key === currentPronounsKey) + .value(); - /** - * Loads the pronouns list from the translations and adds the green checkmark icon to the currently selected value. - * - * @returns {void} - */ - const loadPronouns = useCallback(() => { - const currentPronouns = lodashGet(props.currentUserPersonalDetails, 'pronouns', ''); + const [searchValue, setSearchValue] = useState(currentPronounsText || ''); - const pronouns = _.chain(props.translate('pronouns')) + const filteredPronounsList = useMemo(() => { + const pronouns = _.chain(translate('pronouns')) .map((value, key) => { const fullPronounKey = `${CONST.PRONOUNS.PREFIX}${key}`; const isCurrentPronouns = fullPronounKey === currentPronouns; - if (isCurrentPronouns) { - setInitiallyFocusedOption({ - text: value, - keyForList: key, - }); - } - return { text: value, value: fullPronounKey, @@ -58,60 +48,38 @@ function PronounsPage(props) { .sortBy((pronoun) => pronoun.text.toLowerCase()) .value(); - setPronounsList(pronouns); + const trimmedSearch = searchValue.trim(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.currentUserPersonalDetails.pronouns]); + if (trimmedSearch.length === 0) { + return []; + } + return _.filter(pronouns, (pronoun) => pronoun.text.toLowerCase().indexOf(trimmedSearch.toLowerCase()) >= 0); + }, [searchValue, currentPronouns, translate]); - const onChangeText = (value = '') => { - setSearchValue(value); - }; + const headerMessage = searchValue.trim() && !filteredPronounsList.length ? translate('common.noResultsFound') : ''; - /** - * @param {Object} selectedPronouns - */ const updatePronouns = (selectedPronouns) => { - PersonalDetails.updatePronouns(selectedPronouns.keyForList === initiallyFocusedOption.keyForList ? '' : lodashGet(selectedPronouns, 'value', '')); + PersonalDetails.updatePronouns(selectedPronouns.keyForList === currentPronouns.keyForList ? '' : lodashGet(selectedPronouns, 'value', '')); }; - /** - * Pronouns list filtered by searchValue needed for the OptionsSelector. - * Empty array if the searchValue is empty. - */ - const filteredPronounsList = _.filter(pronounsList, (pronous) => pronous.text.toLowerCase().indexOf(searchValue.trim().toLowerCase()) >= 0); - - const headerMessage = searchValue.trim() && !filteredPronounsList.length ? props.translate('common.noResultsFound') : ''; - - useEffect(() => { - setSearchValue(initiallyFocusedOption.text); - }, [initiallyFocusedOption]); - - useEffect(() => { - onChangeText(); - loadPronouns(); - }, [loadPronouns]); - return ( Navigation.goBack(ROUTES.SETTINGS_PROFILE)} /> - {props.translate('pronounsPage.isShownOnProfile')} - {/* Only render pronouns if list was loaded (not filtered list), otherwise initially focused item will be empty */} - {pronounsList.length > 0 && ( - - )} + {translate('pronounsPage.isShownOnProfile')} + ); } From df010580d86b561ced350909c85a4770635e67fe Mon Sep 17 00:00:00 2001 From: Thiago Brezinski Date: Tue, 29 Aug 2023 14:17:03 +0100 Subject: [PATCH 050/315] fix(pronouns-page): useLocalize and move variable to state --- src/pages/settings/Profile/PronounsPage.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/pages/settings/Profile/PronounsPage.js b/src/pages/settings/Profile/PronounsPage.js index a37498783821..4fa97a74d061 100644 --- a/src/pages/settings/Profile/PronounsPage.js +++ b/src/pages/settings/Profile/PronounsPage.js @@ -4,18 +4,16 @@ import React, {useState, useMemo} from 'react'; import withCurrentUserPersonalDetails, {withCurrentUserPersonalDetailsPropTypes, withCurrentUserPersonalDetailsDefaultProps} from '../../../components/withCurrentUserPersonalDetails'; import ScreenWrapper from '../../../components/ScreenWrapper'; import HeaderWithBackButton from '../../../components/HeaderWithBackButton'; -import withLocalize, {withLocalizePropTypes} from '../../../components/withLocalize'; import Text from '../../../components/Text'; import styles from '../../../styles/styles'; import * as PersonalDetails from '../../../libs/actions/PersonalDetails'; -import compose from '../../../libs/compose'; import CONST from '../../../CONST'; import ROUTES from '../../../ROUTES'; import Navigation from '../../../libs/Navigation/Navigation'; import SelectionList from '../../../components/SelectionList'; +import useLocalize from '../../../hooks/useLocalize'; const propTypes = { - ...withLocalizePropTypes, ...withCurrentUserPersonalDetailsPropTypes, }; @@ -23,14 +21,18 @@ const defaultProps = { ...withCurrentUserPersonalDetailsDefaultProps, }; -function PronounsPage({currentUserPersonalDetails, translate}) { +function PronounsPage({currentUserPersonalDetails}) { + const {translate} = useLocalize(); const currentPronouns = lodashGet(currentUserPersonalDetails, 'pronouns', ''); const currentPronounsKey = currentPronouns.substring(CONST.PRONOUNS.PREFIX.length); - const currentPronounsText = _.chain(translate('pronouns')) - .find((_value, key) => key === currentPronounsKey) - .value(); - const [searchValue, setSearchValue] = useState(currentPronounsText || ''); + const [searchValue, setSearchValue] = useState(() => { + const currentPronounsText = _.chain(translate('pronouns')) + .find((_value, key) => key === currentPronounsKey) + .value(); + + return currentPronounsText || ''; + }); const filteredPronounsList = useMemo(() => { const pronouns = _.chain(translate('pronouns')) @@ -56,7 +58,7 @@ function PronounsPage({currentUserPersonalDetails, translate}) { return _.filter(pronouns, (pronoun) => pronoun.text.toLowerCase().indexOf(trimmedSearch.toLowerCase()) >= 0); }, [searchValue, currentPronouns, translate]); - const headerMessage = searchValue.trim() && !filteredPronounsList.length ? translate('common.noResultsFound') : ''; + const headerMessage = searchValue.trim() && filteredPronounsList.length === 0 ? translate('common.noResultsFound') : ''; const updatePronouns = (selectedPronouns) => { PersonalDetails.updatePronouns(selectedPronouns.keyForList === currentPronouns.keyForList ? '' : lodashGet(selectedPronouns, 'value', '')); @@ -88,4 +90,4 @@ PronounsPage.propTypes = propTypes; PronounsPage.defaultProps = defaultProps; PronounsPage.displayName = 'PronounsPage'; -export default compose(withLocalize, withCurrentUserPersonalDetails)(PronounsPage); +export default withCurrentUserPersonalDetails(PronounsPage); From 30d76c9fc94bbc5b4fd49d995c9ca493f55c02d5 Mon Sep 17 00:00:00 2001 From: ginsuma <13113013+ginsuma@users.noreply.github.com> Date: Tue, 29 Aug 2023 21:47:30 +0700 Subject: [PATCH 051/315] Fix different grayness levels on parent and child message --- src/components/OfflineWithFeedback.js | 6 +++++- src/pages/home/report/ReportActionItemParentAction.js | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/OfflineWithFeedback.js b/src/components/OfflineWithFeedback.js index 2f99b21b6523..fb0411d24f4c 100644 --- a/src/components/OfflineWithFeedback.js +++ b/src/components/OfflineWithFeedback.js @@ -37,6 +37,9 @@ const propTypes = { /** Whether we should show the error messages */ shouldShowErrorMessages: PropTypes.bool, + /** Whether we should disable opacity */ + shouldDisableOpacity: PropTypes.bool, + /** A function to run when the X button next to the error is clicked */ onClose: PropTypes.func, @@ -63,6 +66,7 @@ const defaultProps = { shouldHideOnDelete: true, errors: null, shouldShowErrorMessages: true, + shouldDisableOpacity: false, onClose: () => {}, style: [], contentContainerStyle: [], @@ -96,7 +100,7 @@ function OfflineWithFeedback(props) { const isOfflinePendingAction = props.network.isOffline && props.pendingAction; const isUpdateOrDeleteError = hasErrors && (props.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE || props.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE); const isAddError = hasErrors && props.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD; - const needsOpacity = (isOfflinePendingAction && !isUpdateOrDeleteError) || isAddError; + const needsOpacity = !props.shouldDisableOpacity && ((isOfflinePendingAction && !isUpdateOrDeleteError) || isAddError); const needsStrikeThrough = props.network.isOffline && props.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE; const hideChildren = props.shouldHideOnDelete && !props.network.isOffline && props.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && !hasErrors; let children = props.children; diff --git a/src/pages/home/report/ReportActionItemParentAction.js b/src/pages/home/report/ReportActionItemParentAction.js index 2af66779309e..68c5163643b5 100644 --- a/src/pages/home/report/ReportActionItemParentAction.js +++ b/src/pages/home/report/ReportActionItemParentAction.js @@ -53,6 +53,7 @@ function ReportActionItemParentAction(props) { } return ( Date: Tue, 29 Aug 2023 23:39:22 +0200 Subject: [PATCH 052/315] reverting file to main --- ios/NewExpensify.xcodeproj/project.pbxproj | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 6aeb6cd1cf7d..d87226269a8b 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -29,7 +29,7 @@ 70CF6E82262E297300711ADC /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 70CF6E81262E297300711ADC /* BootSplash.storyboard */; }; BDB853621F354EBB84E619C2 /* ExpensifyNewKansas-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */; }; DD79042B2792E76D004484B4 /* RCTBootSplash.m in Sources */ = {isa = PBXBuildFile; fileRef = DD79042A2792E76D004484B4 /* RCTBootSplash.m */; }; - E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */ = {isa = PBXBuildFile; }; + E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; E9DF872D2525201700607FDC /* AirshipConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = E9DF872C2525201700607FDC /* AirshipConfig.plist */; }; ED222ED90E074A5481A854FA /* ExpensifyNeue-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */; }; F0C450EA2705020500FD2970 /* colors.json in Resources */ = {isa = PBXBuildFile; fileRef = F0C450E92705020500FD2970 /* colors.json */; }; @@ -112,7 +112,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */, + E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */, 5A464BC8112CDB1DE1E38F1C /* libPods-NewExpensify.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -701,7 +701,6 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_BITCODE = NO; INFOPLIST_FILE = "$(SRCROOT)/NewExpensify/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -715,7 +714,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev; PRODUCT_NAME = "New Expensify Dev"; PROVISIONING_PROFILE_SPECIFIER = expensify_chat_dev; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = expensify_chat_dev; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -735,7 +733,6 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; INFOPLIST_FILE = NewExpensify/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -748,7 +745,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev; PRODUCT_NAME = "New Expensify Dev"; PROVISIONING_PROFILE_SPECIFIER = expensify_chat_dev; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = expensify_chat_dev; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; From 7fd1ec361450ab14833866a7f47d1c22ad81ecca Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Wed, 30 Aug 2023 09:30:14 +0700 Subject: [PATCH 053/315] display not found page with invalid field edit --- src/pages/EditRequestPage.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/EditRequestPage.js b/src/pages/EditRequestPage.js index 83b0019315e4..266515e29c2c 100644 --- a/src/pages/EditRequestPage.js +++ b/src/pages/EditRequestPage.js @@ -18,6 +18,7 @@ import EditRequestAmountPage from './EditRequestAmountPage'; import reportPropTypes from './reportPropTypes'; import * as IOU from '../libs/actions/IOU'; import * as CurrencyUtils from '../libs/CurrencyUtils'; +import FullPageNotFoundView from '../components/BlockingViews/FullPageNotFoundView'; const propTypes = { /** Route from navigation */ @@ -168,7 +169,7 @@ function EditRequestPage({report, route, parentReport, policy, session}) { ); } - return null; + return ; } EditRequestPage.displayName = 'EditRequestPage'; From fca14f475b702b085d1ce35b8ad78089b90ed9a3 Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 30 Aug 2023 12:20:22 +0200 Subject: [PATCH 054/315] Create git hook to add CP actor to commit message --- .github/workflows/cherryPick.yml | 20 ++++++++++++++++++++ tests/unit/CIGitLogicTest.sh | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml index d4c17a734b1c..25a8e7fe682b 100644 --- a/.github/workflows/cherryPick.yml +++ b/.github/workflows/cherryPick.yml @@ -77,6 +77,23 @@ jobs: id: cherryPick run: | echo "Attempting to cherry-pick ${{ steps.getCPMergeCommit.outputs.MERGE_COMMIT_SHA }}" + + # Set up a git hook to include the actor who triggered this CP in the commit message + # Note that the -x flag to `git cherry-pick` appends a message like '(cherry picked from commit abcd)' to the original commit message + # The git hook we create here will update that to: '(cherry picked from commit by roryabraham)' (using the username of the deployer that triggered the CP) + # Note that we can't change the actor because only OSBotify has permission to push code straight to staging + echo '#!/bin/bash' >> .git/hooks/prepare-commit-msg + + # Explaining this command: + # -i flag tells sed to "edit the file inline" + # -E means "use extended regex" + # The regex itself captures "(cherry picked from commit abcd" and then appends "by ${{ github.actor }}" using \1 (the capture group) + # $1 – the first argument to the prepare-commit-msg hook is the filepath of the text file containing the commit message + # shellcheck disable=SC2016 + echo 'sed -i "" -E "s/(\(cherry picked from commit .*[^)])/\1 by ${{ github.actor }}/" $1' >> .git/hooks/prepare-commit-msg + chmod u+x .git/hooks/prepare-commit-msg + + # Run the cherry-pick command if git cherry-pick -S -x --mainline 1 ${{ steps.getCPMergeCommit.outputs.MERGE_COMMIT_SHA }}; then echo "🎉 No conflicts! CP was a success, PR can be automerged 🎉" echo "HAS_CONFLICTS=false" >> "$GITHUB_OUTPUT" @@ -88,6 +105,9 @@ jobs: echo "HAS_CONFLICTS=true" >> "$GITHUB_OUTPUT" fi + # Clean up git hook + rm .git/hooks/prepare-commit-msg + - name: Push changes run: | if [[ ${{steps.cherryPick.outputs.HAS_CONFLICTS}} == 'true' ]]; then diff --git a/tests/unit/CIGitLogicTest.sh b/tests/unit/CIGitLogicTest.sh index 1bb5c88d3427..d79fa7a22c0c 100755 --- a/tests/unit/CIGitLogicTest.sh +++ b/tests/unit/CIGitLogicTest.sh @@ -135,7 +135,12 @@ function cherry_pick_pr { git switch staging git switch -c cherry-pick-staging + echo '#!/bin/bash' >> .git/hooks/prepare-commit-msg + # shellcheck disable=SC2016 + echo 'sed -i "" -E "s/(\(cherry picked from commit .*[^)])/\1 by humanDeployer/" $1' >> .git/hooks/prepare-commit-msg + chmod u+x .git/hooks/prepare-commit-msg git cherry-pick -x --mainline 1 --strategy=recursive -Xtheirs "$PR_MERGE_COMMIT" + rm .git/hooks/prepare-commit-msg git cherry-pick -x --mainline 1 "$VERSION_BUMP_COMMIT" git switch staging From 4a167a5903294341b5321f74c314c5bc9b104b27 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 14:37:05 +0300 Subject: [PATCH 055/315] [24321] Large amounts are no longer cut off on smaller widths. --- .../ReportActionItem/MoneyRequestPreview.js | 31 ++++++++++++++++++- src/styles/styles.js | 7 +++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js index 1fb611691fbb..3791518ac531 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview.js +++ b/src/components/ReportActionItem/MoneyRequestPreview.js @@ -34,6 +34,8 @@ import PressableWithFeedback from '../Pressable/PressableWithoutFeedback'; import * as ReceiptUtils from '../../libs/ReceiptUtils'; import ReportActionItemImages from './ReportActionItemImages'; import transactionPropTypes from '../transactionPropTypes'; +import variables from '../../styles/variables'; +import useWindowDimensions from '../../hooks/useWindowDimensions'; const propTypes = { /** The active IOUReport, used for Onyx subscription */ @@ -134,6 +136,9 @@ function MoneyRequestPreview(props) { if (_.isEmpty(props.iouReport) && !props.isBillSplit) { return null; } + + const {isSmallScreenWidth, windowWidth} = useWindowDimensions(); + const sessionAccountID = lodashGet(props.session, 'accountID', null); const managerID = props.iouReport.managerID || ''; const ownerAccountID = props.iouReport.ownerAccountID || ''; @@ -159,6 +164,22 @@ function MoneyRequestPreview(props) { description = props.transaction.merchant; } + // Prevents large amounts from being cropped on small screens + const getFontSizeToSubstract = () => { + let toSubstract = 0; + if (isSmallScreenWidth) { + const widthDifference = variables.mobileResponsiveWidthBreakpoint - windowWidth; + if (widthDifference > 450) toSubstract = 9; + else if (widthDifference > 400) toSubstract = 6; + else if (widthDifference > 350) toSubstract = 2; + } + + // requestAmount also includes digits after ".", so "10000.00" qualifies. + if (requestAmount >= 1000000) toSubstract += 2; + + return toSubstract; + }; + const getSettledMessage = () => { switch (lodashGet(props.action, 'originalMessage.paymentType', '')) { case CONST.IOU.PAYMENT_TYPE.PAYPAL_ME: @@ -253,7 +274,15 @@ function MoneyRequestPreview(props) { - {getDisplayAmountText()} + + {getDisplayAmountText()} + {ReportUtils.isSettled(props.iouReport.reportID) && !props.isBillSplit && ( Date: Wed, 30 Aug 2023 13:58:24 +0200 Subject: [PATCH 056/315] Reimplement markPullRequestsAsDeployed --- .eslintrc.js | 8 + .../javascript/authorChecklist/index.js | 3646 +++++++++------- .../javascript/awaitStagingDeploys/index.js | 3648 +++++++++------- .../actions/javascript/bumpVersion/index.js | 2712 +++++++----- .../javascript/checkDeployBlockers/index.js | 3648 +++++++++------- .../createOrUpdateStagingDeploy/index.js | 3652 ++++++++++------- .../getDeployPullRequestList/index.js | 3652 ++++++++++------- .../javascript/getPreviousVersion/index.js | 2712 +++++++----- .../javascript/getPullRequestDetails/index.js | 3648 +++++++++------- .../javascript/getReleaseBody/index.js | 3648 +++++++++------- .../javascript/isStagingDeployLocked/index.js | 3648 +++++++++------- .../markPullRequestsAsDeployed/index.js | 2991 +++++++++----- .../markPullRequestsAsDeployed.js | 131 +- .../javascript/postTestBuildComment/index.js | 3646 +++++++++------- .../reopenIssueWithComment/index.js | 3646 +++++++++------- .../javascript/reviewerChecklist/index.js | 3646 +++++++++------- .../javascript/verifySignedCommits/index.js | 3648 +++++++++------- 17 files changed, 32355 insertions(+), 19975 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index ec55f16b2832..22b94d79e369 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -163,5 +163,13 @@ module.exports = { ], }, }, + { + files: ['tests/**/*.{js,jsx,ts,tsx}', '.github/**/*.{js,jsx,ts,tsx}'], + rules: { + '@lwc/lwc/no-async-await': 'off', + 'no-await-in-loop': 'off', + 'no-restricted-syntax': ['error', 'ForInStatement', 'LabeledStatement', 'WithStatement'], + }, + }, ], }; diff --git a/.github/actions/javascript/authorChecklist/index.js b/.github/actions/javascript/authorChecklist/index.js index 4276ea0ba6fc..a63cbc78ec62 100644 --- a/.github/actions/javascript/authorChecklist/index.js +++ b/.github/actions/javascript/authorChecklist/index.js @@ -105,7 +105,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16117,1066 +16117,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17185,19 +17250,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17208,34 +17282,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17245,15 +17333,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17276,31 +17369,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17315,9 +17430,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17326,6 +17446,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17334,6 +17457,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17343,10 +17467,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17364,32 +17492,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17426,7 +17575,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17480,7 +17629,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17489,14 +17638,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17504,11 +17657,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17517,13 +17671,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17535,6 +17696,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17553,26 +17719,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17580,12 +17762,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17598,11 +17780,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17610,31 +17797,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17682,6 +17883,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17720,13 +17925,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17734,6 +17943,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17747,6 +17957,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17756,6 +17967,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17769,9 +17981,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17783,11 +18003,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17796,18 +18020,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17815,10 +18049,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17830,7 +18069,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17840,29 +18079,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17870,7 +18132,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17883,10 +18145,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17896,12 +18163,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17921,12 +18193,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17938,15 +18220,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17955,10 +18247,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17967,20 +18264,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17995,25 +18304,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18033,12 +18356,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18058,6 +18387,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18067,21 +18405,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18093,11 +18438,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18119,6 +18472,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18132,53 +18489,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18187,545 +18571,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/awaitStagingDeploys/index.js b/.github/actions/javascript/awaitStagingDeploys/index.js index bc8510ba5bc6..c5aa6d3b20b3 100644 --- a/.github/actions/javascript/awaitStagingDeploys/index.js +++ b/.github/actions/javascript/awaitStagingDeploys/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 1021: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const CONST = __nccwpck_require__(4097); const ActionUtils = __nccwpck_require__(970); const GitHubUtils = __nccwpck_require__(7999); @@ -143,7 +143,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16158,1066 +16158,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17226,19 +17291,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17249,34 +17323,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17286,15 +17374,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17317,31 +17410,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17356,9 +17471,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17367,6 +17487,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17375,6 +17498,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17384,10 +17508,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17405,32 +17533,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17467,7 +17616,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17521,7 +17670,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17530,14 +17679,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17545,11 +17698,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17558,13 +17712,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17576,6 +17737,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17594,26 +17760,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17621,12 +17803,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17639,11 +17821,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17651,31 +17838,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17723,6 +17924,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17761,13 +17966,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17775,6 +17984,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17788,6 +17998,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17797,6 +18008,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17810,9 +18022,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17824,11 +18044,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17837,18 +18061,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17856,10 +18090,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17871,7 +18110,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17881,29 +18120,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17911,7 +18173,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17924,10 +18186,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17937,12 +18204,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17962,12 +18234,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17979,15 +18261,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17996,10 +18288,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18008,20 +18305,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18036,25 +18345,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18074,12 +18397,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18099,6 +18428,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18108,21 +18446,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18134,11 +18479,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18160,6 +18513,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18173,53 +18530,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18228,545 +18612,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/bumpVersion/index.js b/.github/actions/javascript/bumpVersion/index.js index f780e50a4587..830dbf626548 100644 --- a/.github/actions/javascript/bumpVersion/index.js +++ b/.github/actions/javascript/bumpVersion/index.js @@ -11,7 +11,7 @@ module.exports = const {promisify} = __nccwpck_require__(669); const fs = __nccwpck_require__(747); const exec = promisify(__nccwpck_require__(129).exec); -const _ = __nccwpck_require__(571); +const _ = __nccwpck_require__(947); const core = __nccwpck_require__(186); const versionUpdater = __nccwpck_require__(7); const {updateAndroidVersion, updateiOSVersion, generateAndroidVersionCode} = __nccwpck_require__(322); @@ -178,7 +178,7 @@ exports.updateiOSVersion = function updateiOSVersion(version) { /***/ 7: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(571); +const _ = __nccwpck_require__(947); const SEMANTIC_VERSION_LEVELS = { MAJOR: 'MAJOR', @@ -3068,8 +3068,8 @@ exports.debug = debug; // for test /***/ }), -/***/ 521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +/***/ 947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; // ESM COMPAT FLAG @@ -3077,636 +3077,672 @@ __nccwpck_require__.r(__webpack_exports__); // EXPORTS __nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip }); -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - return rnds8Pool.slice(poolPtr, poolPtr += 16); -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); -} +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -const byteToHex = []; +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return uuid; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; +} -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; +} - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +/* harmony default export */ const isString = (tagTester('String')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +/* harmony default export */ const isNumber = (tagTester('Number')); - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isDate = (tagTester('Date')); - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +/* harmony default export */ const isError = (tagTester('Error')); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +/* harmony default export */ const isSymbol = (tagTester('Symbol')); - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - b[i++] = clockseq & 0xff; // `node` - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - return buf || esm_node_stringify(b); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +var isFunction = tagTester('Function'); - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ +/* harmony default export */ const modules_isFunction = (isFunction); - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - const bytes = []; - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - return bytes; -} -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` - - - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - - if (buf) { - offset = offset || 0; - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +var isDataView = tagTester('DataView'); - return buf; - } +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); +} - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('md5').update(bytes).digest(); +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +var isArguments = tagTester('Arguments'); -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +/* harmony default export */ const modules_isArguments = (isArguments); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); } -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('sha1').update(bytes).digest(); +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } - - return parseInt(uuid.substr(14, 1), 16); } -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js -/***/ }), -/***/ 641: -/***/ ((__unused_webpack_module, exports) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -Object.defineProperty(exports, "__esModule", ({ value: true })); -// Current version. -var VERSION = '1.13.4'; +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); } - args[startIndex] = rest; - return func.apply(this, args); }; } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} - -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} - -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} - -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } } -var isString = tagTester('String'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); - -var isSymbol = tagTester('Symbol'); - -var isArrayBuffer = tagTester('ArrayBuffer'); - -var isFunction = tagTester('Function'); - -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} - -var isFunction$1 = isFunction; - -var hasObjectTag = tagTester('Object'); - -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); - -var isDataView = tagTester('DataView'); - -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); -} - -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); - -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); - -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); -} - -var isArguments = tagTester('Arguments'); - -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); - -var isArguments$1 = isArguments; - -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} - -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; - }; -} - -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; - } -} - -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; -} - -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); - -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); - -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); -} - -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); - -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); - -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); - } - }; -} - -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} // Retrieve the names of an object's own properties. // Delegates to **ECMAScript 5**'s native `Object.keys`. @@ -3714,25 +3750,35 @@ function keys(obj) { if (!isObject(obj)) return []; if (nativeKeys) return nativeKeys(obj); var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); + for (var key in obj) if (has(obj, key)) keys.push(key); // Ahem, IE < 9. if (hasEnumBug) collectNonEnumProps(obj, keys); return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js + + + + + + // Is a given array, string, or object empty? // An "empty" object has no enumerable own-properties. function isEmpty(obj) { if (obj == null) return true; // Skip the more expensive `toString`-based type checks if `obj` has no // `.length`. - var length = getLength(obj); + var length = _getLength(obj); if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) + isArray(obj) || isString(obj) || modules_isArguments(obj) )) return length === 0; - return getLength(keys(obj)) === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js + + // Returns whether an object has a given set of `key:value` pairs. function isMatch(object, attrs) { var _keys = keys(attrs), length = _keys.length; @@ -3745,40 +3791,58 @@ function isMatch(object, attrs) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js + + // If Underscore is called as a function, it returns a wrapped object that can // be used OO-style. This wrapper holds altered versions of all functions added // through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); this._wrapped = obj; } -_$1.VERSION = VERSION; +_.VERSION = VERSION; // Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { +_.prototype.value = function() { return this._wrapped; }; // Provide unwrapping proxies for some methods used in engine operations // such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -_$1.prototype.toString = function() { +_.prototype.toString = function() { return String(this._wrapped); }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js + + // Internal function to wrap or shallow-copy an ArrayBuffer, // typed array or DataView to a new view, reusing the buffer. function toBufferView(bufferSource) { return new Uint8Array( bufferSource.buffer || bufferSource, bufferSource.byteOffset || 0, - getByteLength(bufferSource) + _getByteLength(bufferSource) ); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js + + + + + + + + + + + // We use this string twice, so give it a name for minification. var tagDataView = '[object DataView]'; @@ -3800,14 +3864,14 @@ function eq(a, b, aStack, bStack) { // Internal recursive comparison function for `_.isEqual`. function deepEq(a, b, aStack, bStack) { // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; className = tagDataView; } switch (className) { @@ -3839,9 +3903,9 @@ function deepEq(a, b, aStack, bStack) { } var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; areArrays = true; } @@ -3851,8 +3915,8 @@ function deepEq(a, b, aStack, bStack) { // Objects with different constructors are not equivalent, but `Object`s or `Array`s // from different frames are. var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) && ('constructor' in a && 'constructor' in b)) { return false; } @@ -3893,7 +3957,7 @@ function deepEq(a, b, aStack, bStack) { while (length--) { // Deep compare each member key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; } } // Remove the first object from the stack of traversed objects. @@ -3907,6 +3971,11 @@ function isEqual(a, b) { return eq(a, b); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js + + + + // Retrieve all the enumerable property names of an object. function allKeys(obj) { if (!isObject(obj)) return []; @@ -3917,24 +3986,29 @@ function allKeys(obj) { return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js + + + + // Since the regular `Object.prototype.toString` type tests don't work for // some types in IE 11, we use a fingerprinting heuristic instead, based // on the methods. It's not great, but it's the best we got. // The fingerprint method lists are defined below. function ie11fingerprint(methods) { - var length = getLength(methods); + var length = _getLength(methods); return function(obj) { if (obj == null) return false; // `Map`, `WeakMap` and `Set` have no enumerable keys. var keys = allKeys(obj); - if (getLength(keys)) return false; + if (_getLength(keys)) return false; for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; + if (!modules_isFunction(obj[methods[i]])) return false; } // If we are testing against `WeakMap`, we need to ensure that // `obj` doesn't have a `forEach` method in order to distinguish // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } @@ -3951,13 +4025,34 @@ var mapMethods = commonInit.concat(forEachName, mapTail), weakMapMethods = commonInit.concat(mapTail), setMethods = ['add'].concat(commonInit, forEachName, hasName); -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js -var isWeakSet = tagTester('WeakSet'); // Retrieve the values of an object's properties. function values(obj) { @@ -3970,6 +4065,9 @@ function values(obj) { return values; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + // Convert an object into a list of `[key, value]` pairs. // The opposite of `_.object` with one argument. function pairs(obj) { @@ -3982,6 +4080,9 @@ function pairs(obj) { return pairs; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js + + // Invert the keys and values of an object. The values must be serializable. function invert(obj) { var result = {}; @@ -3992,15 +4093,19 @@ function invert(obj) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js + + // Return a sorted list of the function names available on the object. function functions(obj) { var names = []; for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); + if (modules_isFunction(obj[key])) names.push(key); } return names.sort(); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js // An internal function for creating assigner functions. function createAssigner(keysFunc, defaults) { return function(obj) { @@ -4020,16 +4125,32 @@ function createAssigner(keysFunc, defaults) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js + + + // Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); +/* harmony default export */ const extend = (createAssigner(allKeys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js + + // Assigns a given object with all the own properties in the passed-in // object(s). // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + // Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + // Create a naked function reference for surrogate-prototype-swapping. function ctor() { @@ -4047,6 +4168,10 @@ function baseCreate(prototype) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js + + + // Creates an object that inherits from the given prototype object. // If additional properties are provided then they will be added to the // created object. @@ -4056,12 +4181,18 @@ function create(prototype, props) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js + + + + // Create a (shallow-cloned) duplicate of an object. function clone(obj) { if (!isObject(obj)) return obj; return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -4070,19 +4201,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -4093,34 +4233,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -4130,15 +4284,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -4161,31 +4320,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -4200,9 +4381,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -4211,6 +4397,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -4219,6 +4408,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -4228,10 +4418,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -4249,32 +4443,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + + +// Function for unescaping strings from HTML interpolation. +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js -// Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -4311,7 +4526,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -4365,7 +4580,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -4374,14 +4589,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -4389,11 +4608,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -4402,13 +4622,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -4420,6 +4647,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -4438,26 +4670,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -4465,12 +4713,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -4483,11 +4731,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -4495,31 +4748,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -4567,6 +4834,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -4605,13 +4876,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -4619,6 +4894,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -4632,6 +4908,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -4641,6 +4918,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -4654,9 +4932,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -4668,11 +4954,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -4681,18 +4971,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -4700,10 +5000,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -4715,7 +5020,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -4725,29 +5030,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -4755,7 +5083,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -4768,10 +5096,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -4781,12 +5114,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -4806,12 +5144,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -4823,15 +5171,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -4840,10 +5198,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -4852,20 +5215,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -4880,25 +5255,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -4918,12 +5307,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -4943,6 +5338,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -4952,21 +5356,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -4978,11 +5389,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -5004,6 +5423,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -5017,53 +5440,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -5072,22 +5522,34 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + // Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in @@ -5096,6 +5558,9 @@ function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + // Get the first element of an array. Passing **n** will return the first N // values in the array. The **guard** check allows it to work with `_.map`. function first(array, n, guard) { @@ -5104,6 +5569,9 @@ function first(array, n, guard) { return initial(array, array.length - n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + // Returns everything but the first entry of the `array`. Especially useful on // the `arguments` object. Passing an **n** will return the rest N values in the // `array`. @@ -5111,6 +5579,9 @@ function rest(array, n, guard) { return slice.call(array, n == null || guard ? 1 : n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + // Get the last element of an array. Passing **n** will return the last N // values in the array. function last(array, n, guard) { @@ -5119,30 +5590,52 @@ function last(array, n, guard) { return rest(array, Math.max(0, array.length - n)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + // Trim out all falsy values from an array. function compact(array) { return filter(array, Boolean); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + // Flatten out an array, either recursively (by default), or up to `depth`. // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); +function flatten_flatten(array, depth) { + return flatten(array, depth, false); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + // Take the difference between one array and a number of other arrays. // Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); return filter(array, function(value){ return !contains(rest, value); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + // Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { return difference(array, otherArrays); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + // Produce a duplicate-free version of the array. If the array has already // been sorted, you have the option of using a faster algorithm. @@ -5158,7 +5651,7 @@ function uniq(array, isSorted, iteratee, context) { if (iteratee != null) iteratee = cb(iteratee, context); var result = []; var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var value = array[i], computed = iteratee ? iteratee(value, i, array) : value; if (isSorted && !iteratee) { @@ -5176,18 +5669,27 @@ function uniq(array, isSorted, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + // Produce an array that contains the union: each distinct element from all of // the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + // Produce an array that contains every item shared between all the // passed-in arrays. function intersection(array) { var result = []; var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var item = array[i]; if (contains(result, item)) continue; var j; @@ -5199,10 +5701,15 @@ function intersection(array) { return result; } -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; var result = Array(length); for (var index = 0; index < length; index++) { @@ -5211,16 +5718,23 @@ function unzip(array) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + // Zip together multiple lists into a single array -- elements that share // an index go together. -var zip = restArguments(unzip); +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + // Converts lists into objects. Pass either a single array of `[key, value]` // pairs, or two parallel arrays of the same length -- one of keys, and one of // the corresponding values. Passing by pairs is the reverse of `_.pairs`. function object(list, values) { var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { + for (var i = 0, length = _getLength(list); i < length; i++) { if (values) { result[list[i]] = values[i]; } else { @@ -5230,6 +5744,7 @@ function object(list, values) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js // Generate an integer Array containing an arithmetic progression. A port of // the native Python `range()` function. See // [the Python documentation](https://docs.python.org/library/functions.html#range). @@ -5252,6 +5767,9 @@ function range(start, stop, step) { return range; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + // Chunk a single array into multiple arrays, each containing `count` or fewer // items. function chunk(array, count) { @@ -5264,28 +5782,44 @@ function chunk(array, count) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + // Helper function to continue chaining intermediate results. function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return instance._chain ? _(obj).chain() : obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + // Add your own custom functions to the Underscore object. function mixin(obj) { each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { + var func = _[name] = obj[name]; + _.prototype[name] = function() { var args = [this._wrapped]; push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); + return chainResult(this, func.apply(_, args)); }; }); - return _$1; + return _; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + // Add all mutator `Array` functions to the wrapper. each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) { method.apply(obj, arguments); @@ -5300,317 +5834,609 @@ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function( // Add all accessor `Array` functions to the wrapper. each(['concat', 'join', 'slice'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) obj = method.apply(obj, arguments); return chainResult(this, obj); }; }); +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js // Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js // Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + // Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); +var index_default_ = mixin(modules_namespaceObject); // Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + /***/ }), -/***/ 571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js + + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('md5').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js + + +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js + + + +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return esm_node_stringify(rnds); +} + +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + + -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -var underscoreNodeF = __nccwpck_require__(641); -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map /***/ }), diff --git a/.github/actions/javascript/checkDeployBlockers/index.js b/.github/actions/javascript/checkDeployBlockers/index.js index ca368f0cff29..77f58453fa04 100644 --- a/.github/actions/javascript/checkDeployBlockers/index.js +++ b/.github/actions/javascript/checkDeployBlockers/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 6265: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const CONST = __nccwpck_require__(4097); const GithubUtils = __nccwpck_require__(7999); @@ -110,7 +110,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16078,1066 +16078,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17146,19 +17211,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17169,34 +17243,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17206,15 +17294,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17237,31 +17330,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17276,9 +17391,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17287,6 +17407,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17295,6 +17418,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17304,10 +17428,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17325,32 +17453,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17387,7 +17536,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17441,7 +17590,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17450,14 +17599,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17465,11 +17618,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17478,13 +17632,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17496,6 +17657,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17514,26 +17680,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17541,12 +17723,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17559,11 +17741,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17571,31 +17758,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17643,6 +17844,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17681,13 +17886,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17695,6 +17904,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17708,6 +17918,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17717,6 +17928,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17730,9 +17942,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17744,11 +17964,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17757,18 +17981,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17776,10 +18010,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17791,7 +18030,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17801,29 +18040,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17831,7 +18093,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17844,10 +18106,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17857,12 +18124,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17882,12 +18154,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17899,15 +18181,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17916,10 +18208,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17928,20 +18225,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17956,25 +18265,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17994,12 +18317,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18019,6 +18348,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18028,21 +18366,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18054,11 +18399,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18080,6 +18433,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18093,53 +18450,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18148,545 +18532,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js index 1b2e81fc244e..d774a73eb23c 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 3926: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const moment = __nccwpck_require__(9623); const CONST = __nccwpck_require__(4097); @@ -212,7 +212,7 @@ module.exports = CONST; /***/ 669: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const {spawn, execSync} = __nccwpck_require__(3129); const CONST = __nccwpck_require__(4097); const sanitizeStringForJSONParse = __nccwpck_require__(9338); @@ -351,7 +351,7 @@ module.exports = { /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -909,7 +909,7 @@ module.exports = function (inputString) { /***/ 8007: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const SEMANTIC_VERSION_LEVELS = { MAJOR: 'MAJOR', @@ -22193,1066 +22193,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -23261,19 +23326,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -23284,34 +23358,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -23321,15 +23409,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -23352,31 +23445,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -23391,9 +23506,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -23402,6 +23522,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -23410,6 +23533,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -23419,10 +23543,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -23440,32 +23568,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -23502,7 +23651,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -23556,7 +23705,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -23565,14 +23714,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -23580,11 +23733,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -23593,13 +23747,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -23611,6 +23772,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -23629,26 +23795,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -23656,12 +23838,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -23674,11 +23856,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -23686,31 +23873,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -23758,6 +23959,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -23796,13 +24001,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -23810,6 +24019,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -23823,6 +24033,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -23832,6 +24043,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -23845,9 +24057,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -23859,11 +24079,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -23872,18 +24096,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -23891,10 +24125,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -23906,7 +24145,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -23916,29 +24155,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -23946,7 +24208,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -23959,10 +24221,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -23972,12 +24239,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -23997,12 +24269,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -24014,15 +24296,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -24031,10 +24323,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -24043,20 +24340,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -24071,25 +24380,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -24109,12 +24432,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -24134,6 +24463,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -24143,21 +24481,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -24169,11 +24514,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -24195,6 +24548,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -24208,53 +24565,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -24263,545 +24647,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/getDeployPullRequestList/index.js b/.github/actions/javascript/getDeployPullRequestList/index.js index 56541aa31b27..01e8f166b397 100644 --- a/.github/actions/javascript/getDeployPullRequestList/index.js +++ b/.github/actions/javascript/getDeployPullRequestList/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 5847: /***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const github = __nccwpck_require__(5438); const ActionUtils = __nccwpck_require__(970); @@ -146,7 +146,7 @@ module.exports = CONST; /***/ 669: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const {spawn, execSync} = __nccwpck_require__(3129); const CONST = __nccwpck_require__(4097); const sanitizeStringForJSONParse = __nccwpck_require__(9338); @@ -285,7 +285,7 @@ module.exports = { /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -843,7 +843,7 @@ module.exports = function (inputString) { /***/ 8007: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const SEMANTIC_VERSION_LEVELS = { MAJOR: 'MAJOR', @@ -16479,1066 +16479,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17547,19 +17612,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17570,34 +17644,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17607,15 +17695,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17638,31 +17731,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17677,9 +17792,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17688,6 +17808,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17696,6 +17819,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17705,10 +17829,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17726,32 +17854,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17788,7 +17937,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17842,7 +17991,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17851,14 +18000,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17866,11 +18019,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17879,13 +18033,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17897,6 +18058,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17915,26 +18081,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17942,12 +18124,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17960,11 +18142,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17972,31 +18159,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -18044,6 +18245,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -18082,13 +18287,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -18096,6 +18305,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -18109,6 +18319,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -18118,6 +18329,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -18131,9 +18343,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -18145,11 +18365,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -18158,18 +18382,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -18177,10 +18411,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -18192,7 +18431,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -18202,29 +18441,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -18232,7 +18494,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -18245,10 +18507,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -18258,12 +18525,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -18283,12 +18555,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -18300,15 +18582,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18317,10 +18609,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18329,20 +18626,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18357,25 +18666,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18395,12 +18718,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18420,6 +18749,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18429,21 +18767,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18455,11 +18800,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18481,6 +18834,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18494,53 +18851,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18549,545 +18933,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/getPreviousVersion/index.js b/.github/actions/javascript/getPreviousVersion/index.js index 5498aa3996d7..37db08db93e9 100644 --- a/.github/actions/javascript/getPreviousVersion/index.js +++ b/.github/actions/javascript/getPreviousVersion/index.js @@ -10,7 +10,7 @@ module.exports = const {readFileSync} = __nccwpck_require__(747); const core = __nccwpck_require__(186); -const _ = __nccwpck_require__(571); +const _ = __nccwpck_require__(947); const versionUpdater = __nccwpck_require__(7); const semverLevel = core.getInput('SEMVER_LEVEL', {require: true}); @@ -28,7 +28,7 @@ core.setOutput('PREVIOUS_VERSION', previousVersion); /***/ 7: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(571); +const _ = __nccwpck_require__(947); const SEMANTIC_VERSION_LEVELS = { MAJOR: 'MAJOR', @@ -2214,8 +2214,8 @@ exports.debug = debug; // for test /***/ }), -/***/ 521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +/***/ 947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; // ESM COMPAT FLAG @@ -2223,636 +2223,672 @@ __nccwpck_require__.r(__webpack_exports__); // EXPORTS __nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip }); -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - return rnds8Pool.slice(poolPtr, poolPtr += 16); -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); -} +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -const byteToHex = []; +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return uuid; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; +} -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; +} - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +/* harmony default export */ const isString = (tagTester('String')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +/* harmony default export */ const isNumber = (tagTester('Number')); - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isDate = (tagTester('Date')); - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +/* harmony default export */ const isError = (tagTester('Error')); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +/* harmony default export */ const isSymbol = (tagTester('Symbol')); - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - b[i++] = clockseq & 0xff; // `node` - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - return buf || esm_node_stringify(b); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +var isFunction = tagTester('Function'); - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ +/* harmony default export */ const modules_isFunction = (isFunction); - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - const bytes = []; - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - return bytes; -} -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` - - - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - - if (buf) { - offset = offset || 0; - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +var isDataView = tagTester('DataView'); - return buf; - } +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); +} - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('md5').update(bytes).digest(); +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +var isArguments = tagTester('Arguments'); -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +/* harmony default export */ const modules_isArguments = (isArguments); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); } -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('sha1').update(bytes).digest(); +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } - - return parseInt(uuid.substr(14, 1), 16); } -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js -/***/ }), -/***/ 641: -/***/ ((__unused_webpack_module, exports) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -Object.defineProperty(exports, "__esModule", ({ value: true })); -// Current version. -var VERSION = '1.13.4'; +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); } - args[startIndex] = rest; - return func.apply(this, args); }; } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} - -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} - -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} - -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } } -var isString = tagTester('String'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); - -var isSymbol = tagTester('Symbol'); - -var isArrayBuffer = tagTester('ArrayBuffer'); - -var isFunction = tagTester('Function'); - -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} - -var isFunction$1 = isFunction; - -var hasObjectTag = tagTester('Object'); - -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); - -var isDataView = tagTester('DataView'); - -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); -} - -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); - -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); - -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); -} - -var isArguments = tagTester('Arguments'); - -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); - -var isArguments$1 = isArguments; - -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} - -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; - }; -} - -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; - } -} - -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; -} - -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); - -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); - -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); -} - -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); - -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); - -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); - } - }; -} - -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} // Retrieve the names of an object's own properties. // Delegates to **ECMAScript 5**'s native `Object.keys`. @@ -2860,25 +2896,35 @@ function keys(obj) { if (!isObject(obj)) return []; if (nativeKeys) return nativeKeys(obj); var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); + for (var key in obj) if (has(obj, key)) keys.push(key); // Ahem, IE < 9. if (hasEnumBug) collectNonEnumProps(obj, keys); return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js + + + + + + // Is a given array, string, or object empty? // An "empty" object has no enumerable own-properties. function isEmpty(obj) { if (obj == null) return true; // Skip the more expensive `toString`-based type checks if `obj` has no // `.length`. - var length = getLength(obj); + var length = _getLength(obj); if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) + isArray(obj) || isString(obj) || modules_isArguments(obj) )) return length === 0; - return getLength(keys(obj)) === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js + + // Returns whether an object has a given set of `key:value` pairs. function isMatch(object, attrs) { var _keys = keys(attrs), length = _keys.length; @@ -2891,40 +2937,58 @@ function isMatch(object, attrs) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js + + // If Underscore is called as a function, it returns a wrapped object that can // be used OO-style. This wrapper holds altered versions of all functions added // through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); this._wrapped = obj; } -_$1.VERSION = VERSION; +_.VERSION = VERSION; // Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { +_.prototype.value = function() { return this._wrapped; }; // Provide unwrapping proxies for some methods used in engine operations // such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -_$1.prototype.toString = function() { +_.prototype.toString = function() { return String(this._wrapped); }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js + + // Internal function to wrap or shallow-copy an ArrayBuffer, // typed array or DataView to a new view, reusing the buffer. function toBufferView(bufferSource) { return new Uint8Array( bufferSource.buffer || bufferSource, bufferSource.byteOffset || 0, - getByteLength(bufferSource) + _getByteLength(bufferSource) ); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js + + + + + + + + + + + // We use this string twice, so give it a name for minification. var tagDataView = '[object DataView]'; @@ -2946,14 +3010,14 @@ function eq(a, b, aStack, bStack) { // Internal recursive comparison function for `_.isEqual`. function deepEq(a, b, aStack, bStack) { // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; className = tagDataView; } switch (className) { @@ -2985,9 +3049,9 @@ function deepEq(a, b, aStack, bStack) { } var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; areArrays = true; } @@ -2997,8 +3061,8 @@ function deepEq(a, b, aStack, bStack) { // Objects with different constructors are not equivalent, but `Object`s or `Array`s // from different frames are. var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) && ('constructor' in a && 'constructor' in b)) { return false; } @@ -3039,7 +3103,7 @@ function deepEq(a, b, aStack, bStack) { while (length--) { // Deep compare each member key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; } } // Remove the first object from the stack of traversed objects. @@ -3053,6 +3117,11 @@ function isEqual(a, b) { return eq(a, b); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js + + + + // Retrieve all the enumerable property names of an object. function allKeys(obj) { if (!isObject(obj)) return []; @@ -3063,24 +3132,29 @@ function allKeys(obj) { return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js + + + + // Since the regular `Object.prototype.toString` type tests don't work for // some types in IE 11, we use a fingerprinting heuristic instead, based // on the methods. It's not great, but it's the best we got. // The fingerprint method lists are defined below. function ie11fingerprint(methods) { - var length = getLength(methods); + var length = _getLength(methods); return function(obj) { if (obj == null) return false; // `Map`, `WeakMap` and `Set` have no enumerable keys. var keys = allKeys(obj); - if (getLength(keys)) return false; + if (_getLength(keys)) return false; for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; + if (!modules_isFunction(obj[methods[i]])) return false; } // If we are testing against `WeakMap`, we need to ensure that // `obj` doesn't have a `forEach` method in order to distinguish // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } @@ -3097,13 +3171,34 @@ var mapMethods = commonInit.concat(forEachName, mapTail), weakMapMethods = commonInit.concat(mapTail), setMethods = ['add'].concat(commonInit, forEachName, hasName); -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js -var isWeakSet = tagTester('WeakSet'); // Retrieve the values of an object's properties. function values(obj) { @@ -3116,6 +3211,9 @@ function values(obj) { return values; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + // Convert an object into a list of `[key, value]` pairs. // The opposite of `_.object` with one argument. function pairs(obj) { @@ -3128,6 +3226,9 @@ function pairs(obj) { return pairs; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js + + // Invert the keys and values of an object. The values must be serializable. function invert(obj) { var result = {}; @@ -3138,15 +3239,19 @@ function invert(obj) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js + + // Return a sorted list of the function names available on the object. function functions(obj) { var names = []; for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); + if (modules_isFunction(obj[key])) names.push(key); } return names.sort(); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js // An internal function for creating assigner functions. function createAssigner(keysFunc, defaults) { return function(obj) { @@ -3166,16 +3271,32 @@ function createAssigner(keysFunc, defaults) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js + + + // Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); +/* harmony default export */ const extend = (createAssigner(allKeys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js + + // Assigns a given object with all the own properties in the passed-in // object(s). // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + // Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + // Create a naked function reference for surrogate-prototype-swapping. function ctor() { @@ -3193,6 +3314,10 @@ function baseCreate(prototype) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js + + + // Creates an object that inherits from the given prototype object. // If additional properties are provided then they will be added to the // created object. @@ -3202,12 +3327,18 @@ function create(prototype, props) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js + + + + // Create a (shallow-cloned) duplicate of an object. function clone(obj) { if (!isObject(obj)) return obj; return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -3216,19 +3347,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -3239,34 +3379,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -3276,15 +3430,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -3307,31 +3466,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -3346,9 +3527,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -3357,6 +3543,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -3365,6 +3554,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -3374,10 +3564,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -3395,32 +3589,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + + +// Function for unescaping strings from HTML interpolation. +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js -// Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -3457,7 +3672,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -3511,7 +3726,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -3520,14 +3735,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -3535,11 +3754,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -3548,13 +3768,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -3566,6 +3793,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -3584,26 +3816,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -3611,12 +3859,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -3629,11 +3877,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -3641,31 +3894,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -3713,6 +3980,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -3751,13 +4022,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -3765,6 +4040,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -3778,6 +4054,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -3787,6 +4064,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -3800,9 +4078,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -3814,11 +4100,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -3827,18 +4117,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -3846,10 +4146,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -3861,7 +4166,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -3871,29 +4176,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -3901,7 +4229,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -3914,10 +4242,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -3927,12 +4260,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -3952,12 +4290,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -3969,15 +4317,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -3986,10 +4344,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -3998,20 +4361,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -4026,25 +4401,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -4064,12 +4453,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -4089,6 +4484,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -4098,21 +4502,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -4124,11 +4535,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -4150,6 +4569,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -4163,53 +4586,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -4218,22 +4668,34 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + // Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in @@ -4242,6 +4704,9 @@ function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + // Get the first element of an array. Passing **n** will return the first N // values in the array. The **guard** check allows it to work with `_.map`. function first(array, n, guard) { @@ -4250,6 +4715,9 @@ function first(array, n, guard) { return initial(array, array.length - n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + // Returns everything but the first entry of the `array`. Especially useful on // the `arguments` object. Passing an **n** will return the rest N values in the // `array`. @@ -4257,6 +4725,9 @@ function rest(array, n, guard) { return slice.call(array, n == null || guard ? 1 : n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + // Get the last element of an array. Passing **n** will return the last N // values in the array. function last(array, n, guard) { @@ -4265,30 +4736,52 @@ function last(array, n, guard) { return rest(array, Math.max(0, array.length - n)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + // Trim out all falsy values from an array. function compact(array) { return filter(array, Boolean); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + // Flatten out an array, either recursively (by default), or up to `depth`. // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); +function flatten_flatten(array, depth) { + return flatten(array, depth, false); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + // Take the difference between one array and a number of other arrays. // Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); return filter(array, function(value){ return !contains(rest, value); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + // Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { return difference(array, otherArrays); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + // Produce a duplicate-free version of the array. If the array has already // been sorted, you have the option of using a faster algorithm. @@ -4304,7 +4797,7 @@ function uniq(array, isSorted, iteratee, context) { if (iteratee != null) iteratee = cb(iteratee, context); var result = []; var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var value = array[i], computed = iteratee ? iteratee(value, i, array) : value; if (isSorted && !iteratee) { @@ -4322,18 +4815,27 @@ function uniq(array, isSorted, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + // Produce an array that contains the union: each distinct element from all of // the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + // Produce an array that contains every item shared between all the // passed-in arrays. function intersection(array) { var result = []; var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var item = array[i]; if (contains(result, item)) continue; var j; @@ -4345,10 +4847,15 @@ function intersection(array) { return result; } -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; var result = Array(length); for (var index = 0; index < length; index++) { @@ -4357,16 +4864,23 @@ function unzip(array) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + // Zip together multiple lists into a single array -- elements that share // an index go together. -var zip = restArguments(unzip); +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + // Converts lists into objects. Pass either a single array of `[key, value]` // pairs, or two parallel arrays of the same length -- one of keys, and one of // the corresponding values. Passing by pairs is the reverse of `_.pairs`. function object(list, values) { var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { + for (var i = 0, length = _getLength(list); i < length; i++) { if (values) { result[list[i]] = values[i]; } else { @@ -4376,6 +4890,7 @@ function object(list, values) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js // Generate an integer Array containing an arithmetic progression. A port of // the native Python `range()` function. See // [the Python documentation](https://docs.python.org/library/functions.html#range). @@ -4398,6 +4913,9 @@ function range(start, stop, step) { return range; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + // Chunk a single array into multiple arrays, each containing `count` or fewer // items. function chunk(array, count) { @@ -4410,28 +4928,44 @@ function chunk(array, count) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + // Helper function to continue chaining intermediate results. function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return instance._chain ? _(obj).chain() : obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + // Add your own custom functions to the Underscore object. function mixin(obj) { each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { + var func = _[name] = obj[name]; + _.prototype[name] = function() { var args = [this._wrapped]; push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); + return chainResult(this, func.apply(_, args)); }; }); - return _$1; + return _; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + // Add all mutator `Array` functions to the wrapper. each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) { method.apply(obj, arguments); @@ -4446,317 +4980,609 @@ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function( // Add all accessor `Array` functions to the wrapper. each(['concat', 'join', 'slice'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) obj = method.apply(obj, arguments); return chainResult(this, obj); }; }); +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js // Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js // Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + // Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); +var index_default_ = mixin(modules_namespaceObject); // Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + /***/ }), -/***/ 571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js + + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('md5').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js + + +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js + + + +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return esm_node_stringify(rnds); +} + +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + + -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -var underscoreNodeF = __nccwpck_require__(641); -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map /***/ }), diff --git a/.github/actions/javascript/getPullRequestDetails/index.js b/.github/actions/javascript/getPullRequestDetails/index.js index 28e0a65db686..b62d404b9f89 100644 --- a/.github/actions/javascript/getPullRequestDetails/index.js +++ b/.github/actions/javascript/getPullRequestDetails/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 8306: /***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const CONST = __nccwpck_require__(4097); const ActionUtils = __nccwpck_require__(970); @@ -155,7 +155,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16123,1066 +16123,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17191,19 +17256,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17214,34 +17288,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17251,15 +17339,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17282,31 +17375,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17321,9 +17436,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17332,6 +17452,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17340,6 +17463,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17349,10 +17473,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17370,32 +17498,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17432,7 +17581,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17486,7 +17635,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17495,14 +17644,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17510,11 +17663,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17523,13 +17677,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17541,6 +17702,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17559,26 +17725,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17586,12 +17768,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17604,11 +17786,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17616,31 +17803,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17688,6 +17889,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17726,13 +17931,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17740,6 +17949,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17753,6 +17963,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17762,6 +17973,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17775,9 +17987,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17789,11 +18009,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17802,18 +18026,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17821,10 +18055,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17836,7 +18075,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17846,29 +18085,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17876,7 +18138,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17889,10 +18151,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17902,12 +18169,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17927,12 +18199,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17944,15 +18226,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17961,10 +18253,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17973,20 +18270,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18001,25 +18310,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18039,12 +18362,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18064,6 +18393,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18073,21 +18411,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18099,11 +18444,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18125,6 +18478,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18138,53 +18495,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18193,545 +18577,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/getReleaseBody/index.js b/.github/actions/javascript/getReleaseBody/index.js index 460ac29d724e..c1cb5c473912 100644 --- a/.github/actions/javascript/getReleaseBody/index.js +++ b/.github/actions/javascript/getReleaseBody/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 8201: /***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const ActionUtils = __nccwpck_require__(970); const GithubUtils = __nccwpck_require__(7999); @@ -97,7 +97,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16065,1066 +16065,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17133,19 +17198,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17156,34 +17230,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17193,15 +17281,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17224,31 +17317,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17263,9 +17378,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17274,6 +17394,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17282,6 +17405,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17291,10 +17415,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17312,32 +17440,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17374,7 +17523,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17428,7 +17577,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17437,14 +17586,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17452,11 +17605,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17465,13 +17619,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17483,6 +17644,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17501,26 +17667,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17528,12 +17710,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17546,11 +17728,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17558,31 +17745,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17630,6 +17831,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17668,13 +17873,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17682,6 +17891,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17695,6 +17905,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17704,6 +17915,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17717,9 +17929,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17731,11 +17951,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17744,18 +17968,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17763,10 +17997,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17778,7 +18017,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17788,29 +18027,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17818,7 +18080,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17831,10 +18093,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17844,12 +18111,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17869,12 +18141,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17886,15 +18168,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17903,10 +18195,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17915,20 +18212,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17943,25 +18252,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17981,12 +18304,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18006,6 +18335,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18015,21 +18353,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18041,11 +18386,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18067,6 +18420,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18080,53 +18437,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18135,545 +18519,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/isStagingDeployLocked/index.js b/.github/actions/javascript/isStagingDeployLocked/index.js index 9bcb3f24e7ac..d4bd75fcec59 100644 --- a/.github/actions/javascript/isStagingDeployLocked/index.js +++ b/.github/actions/javascript/isStagingDeployLocked/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 8441: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const GithubUtils = __nccwpck_require__(7999); @@ -61,7 +61,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16029,1066 +16029,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17097,19 +17162,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17120,34 +17194,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17157,15 +17245,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17188,31 +17281,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17227,9 +17342,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17238,6 +17358,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17246,6 +17369,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17255,10 +17379,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17276,32 +17404,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17338,7 +17487,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17392,7 +17541,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17401,14 +17550,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17416,11 +17569,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17429,13 +17583,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17447,6 +17608,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17465,26 +17631,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17492,12 +17674,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17510,11 +17692,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17522,31 +17709,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17594,6 +17795,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17632,13 +17837,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17646,6 +17855,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17659,6 +17869,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17668,6 +17879,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17681,9 +17893,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17695,11 +17915,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17708,18 +17932,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17727,10 +17961,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17742,7 +17981,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17752,29 +17991,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17782,7 +18044,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17795,10 +18057,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17808,12 +18075,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17833,12 +18105,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17850,15 +18132,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17867,10 +18159,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17879,20 +18176,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17907,25 +18216,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17945,12 +18268,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -17970,6 +18299,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -17979,21 +18317,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18005,11 +18350,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18031,6 +18384,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18044,53 +18401,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18099,545 +18483,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/index.js b/.github/actions/javascript/markPullRequestsAsDeployed/index.js index 38a45bda5054..1b353abcb054 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/index.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 2759: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {context} = __nccwpck_require__(5438); @@ -75,86 +75,77 @@ function getDeployMessage(deployer, deployVerb, prTitle) { * @param {String} message * @returns {Promise} */ -function commentPR(PR, message) { - return GithubUtils.createComment(context.repo.repo, PR, message) - .then(() => console.log(`Comment created on #${PR} successfully 🎉`)) - .catch((err) => { - console.log(`Unable to write comment on #${PR} 😞`); - core.setFailed(err.message); - }); +async function commentPR(PR, message) { + try { + await GithubUtils.createComment(context.repo.report, PR, message); + console.log(`Comment created on #${PR} successfully 🎉`); + } catch (err) { + console.log(`Unable to write comment on #${PR} 😞`); + core.setFailed(err.message); + } } -const run = function () { +const run = async function () { if (isProd) { - // First find the deployer (who closed the last deploy checklist)? - return GithubUtils.octokit.issues - .listForRepo({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - labels: CONST.LABELS.STAGING_DEPLOY, - state: 'closed', - }) - .then(({data}) => _.first(data).number) - .then((lastDeployChecklistNumber) => GithubUtils.getActorWhoClosedIssue(lastDeployChecklistNumber)) - .then((actor) => { - // Create comment on each pull request (one after another to avoid throttling issues) - const deployMessage = getDeployMessage(actor, 'Deployed'); - _.reduce(prList, (promise, pr) => promise.then(() => commentPR(pr, deployMessage)), Promise.resolve()); - }); + // Find the previous deploy checklist + const {data: deployChecklists} = await GithubUtils.octokit.issues.listForRepo({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + labels: CONST.LABELS.STAGING_DEPLOY, + state: 'closed', + }); + const previousChecklistID = _.first(deployChecklists).number; + + // who closed the last deploy checklist? + const deployer = await GithubUtils.getActorWhoClosedIssue(previousChecklistID); + + // Create comment on each pull request (one at a time to avoid throttling issues) + const deployMessage = getDeployMessage(deployer, 'Deployed'); + for (const pr of prList) { + await commentPR(pr, deployMessage); + } + return; } // First find out if this is a normal staging deploy or a CP by looking at the commit message on the tag - return GithubUtils.octokit.repos - .listTags({ + const {data: recentTags} = await GithubUtils.octokit.repos.listTags({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + per_page: 100, + }); + const currentTag = _.find(recentTags, (tag) => tag.name === version); + if (!currentTag) { + const err = `Could not find tag matching ${version}`; + console.error(err); + core.setFailed(err); + return; + } + const commitMessage = ( + await GithubUtils.octokit.git.getCommit({ owner: CONST.GITHUB_OWNER, repo: CONST.APP_REPO, - per_page: 100, - }) - .then(({data}) => { - const tagSHA = _.find(data, (tag) => tag.name === version).commit.sha; - return GithubUtils.octokit.git.getCommit({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - commit_sha: tagSHA, - }); + commit_sha: currentTag.commit.sha, }) - .then(({data}) => { - const isCP = /Merge pull request #\d+ from Expensify\/.*-?cherry-pick-staging-\d+/.test(data.message); - _.reduce( - prList, - (promise, PR) => - promise - - // Then, for each PR, find out who merged it and determine the deployer - .then(() => - GithubUtils.octokit.pulls.get({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - pull_number: PR, - }), - ) - .then((response) => { - /* - * The deployer for staging deploys is: - * 1. For regular staging deploys, the person who merged the PR. - * 2. For automatic CPs (using the label), the person who merged the PR. - * 3. For manual CPs (using the GH UI), the person who triggered the workflow - * (reflected in the branch name). - */ - let deployer = lodashGet(response, 'data.merged_by.login', ''); - const issueTitle = lodashGet(response, 'data.title', ''); - const CPActorMatches = data.message.match(/Merge pull request #\d+ from Expensify\/(.+)-cherry-pick-staging-\d+/); - if (_.isArray(CPActorMatches) && CPActorMatches.length === 2 && CPActorMatches[1] !== CONST.OS_BOTIFY) { - deployer = CPActorMatches[1]; - } - - // Finally, comment on the PR - const deployMessage = getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', issueTitle); - return commentPR(PR, deployMessage); - }), - Promise.resolve(), - ); + ).data.message; + const isCP = /[\S\s]*\(cherry picked from commit .*\)/.test(commitMessage); + + for (const prNumber of prList) { + /* + * Determine who the deployer for the PR is. The "deployer" for staging deploys is: + * 1. For regular staging deploys, the person who merged the PR. + * 2. For CPs, the person who triggered the workflow (documented in the cherry-pick commit message) + */ + const {data: pr} = await GithubUtils.octokit.pulls.get({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + pull_number: prNumber, }); + const deployer = isCP ? commitMessage.match(/\(cherry picked from commit \w*(?: by (.*))?[)]/)[1] || CONST.OS_BOTIFY : pr.merged_by.login; + + const title = pr.title; + const deployMessage = getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', title); + await commentPR(prNumber, deployMessage); + } }; if (require.main === require.cache[eval('__filename')]) { @@ -238,7 +229,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16250,711 +16241,681 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } - - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } - - return ""; -} +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -/***/ }), +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -const byteToHex = []; +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; +} -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js - - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -let _nodeId; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js -let _clockseq; // Previous uuid creation time +/* harmony default export */ const isString = (tagTester('String')); -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); +/* harmony default export */ const isNumber = (tagTester('Number')); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +/* harmony default export */ const isDate = (tagTester('Date')); - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isError = (tagTester('Error')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch +/* harmony default export */ const isSymbol = (tagTester('Symbol')); - msecs += 12219292800000; // `time_low` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +var isFunction = tagTester('Function'); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } - - return buf || esm_node_stringify(b); +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; } -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js - +/* harmony default export */ const modules_isFunction = (isFunction); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +var isDataView = tagTester('DataView'); - return bytes; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - if (buf) { - offset = offset || 0; - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - return buf; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +var isArguments = tagTester('Arguments'); -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; } +}()); - return external_crypto_default().createHash('md5').update(bytes).digest(); -} - -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js - +/* harmony default export */ const modules_isArguments = (isArguments); -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - if (buf) { - offset = offset || 0; - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); +} - return esm_node_stringify(rnds); +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; } -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } - - return external_crypto_default().createHash('sha1').update(bytes).digest(); } -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/***/ }), -/***/ 2940: -/***/ ((module) => { +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) + }; +} + +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); } - return ret } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; - -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; - -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; - -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; - -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; - -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; -} - -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} - -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} - -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} - -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} - -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} - -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} - -var isString = tagTester('String'); - -var isNumber = tagTester('Number'); - -var isDate = tagTester('Date'); - -var isRegExp = tagTester('RegExp'); - -var isError = tagTester('Error'); - -var isSymbol = tagTester('Symbol'); - -var isArrayBuffer = tagTester('ArrayBuffer'); - -var isFunction = tagTester('Function'); - -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} - -var isFunction$1 = isFunction; - -var hasObjectTag = tagTester('Object'); - -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); - -var isDataView = tagTester('DataView'); - -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); -} - -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); - -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); - -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); -} - -var isArguments = tagTester('Arguments'); - -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); - -var isArguments$1 = isArguments; - -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} - -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; - }; -} - -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; - } -} - -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; -} - -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); - -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); - -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); -} - -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); - -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); - -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); - } - }; -} - -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} // Retrieve the names of an object's own properties. // Delegates to **ECMAScript 5**'s native `Object.keys`. @@ -16962,25 +16923,35 @@ function keys(obj) { if (!isObject(obj)) return []; if (nativeKeys) return nativeKeys(obj); var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); + for (var key in obj) if (has(obj, key)) keys.push(key); // Ahem, IE < 9. if (hasEnumBug) collectNonEnumProps(obj, keys); return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js + + + + + + // Is a given array, string, or object empty? // An "empty" object has no enumerable own-properties. function isEmpty(obj) { if (obj == null) return true; // Skip the more expensive `toString`-based type checks if `obj` has no // `.length`. - var length = getLength(obj); + var length = _getLength(obj); if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) + isArray(obj) || isString(obj) || modules_isArguments(obj) )) return length === 0; - return getLength(keys(obj)) === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js + + // Returns whether an object has a given set of `key:value` pairs. function isMatch(object, attrs) { var _keys = keys(attrs), length = _keys.length; @@ -16993,40 +16964,58 @@ function isMatch(object, attrs) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js + + // If Underscore is called as a function, it returns a wrapped object that can // be used OO-style. This wrapper holds altered versions of all functions added // through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); this._wrapped = obj; } -_$1.VERSION = VERSION; +_.VERSION = VERSION; // Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { +_.prototype.value = function() { return this._wrapped; }; // Provide unwrapping proxies for some methods used in engine operations // such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -_$1.prototype.toString = function() { +_.prototype.toString = function() { return String(this._wrapped); }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js + + // Internal function to wrap or shallow-copy an ArrayBuffer, // typed array or DataView to a new view, reusing the buffer. function toBufferView(bufferSource) { return new Uint8Array( bufferSource.buffer || bufferSource, bufferSource.byteOffset || 0, - getByteLength(bufferSource) + _getByteLength(bufferSource) ); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js + + + + + + + + + + + // We use this string twice, so give it a name for minification. var tagDataView = '[object DataView]'; @@ -17048,14 +17037,14 @@ function eq(a, b, aStack, bStack) { // Internal recursive comparison function for `_.isEqual`. function deepEq(a, b, aStack, bStack) { // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; className = tagDataView; } switch (className) { @@ -17087,9 +17076,9 @@ function deepEq(a, b, aStack, bStack) { } var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; areArrays = true; } @@ -17099,8 +17088,8 @@ function deepEq(a, b, aStack, bStack) { // Objects with different constructors are not equivalent, but `Object`s or `Array`s // from different frames are. var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) && ('constructor' in a && 'constructor' in b)) { return false; } @@ -17141,7 +17130,7 @@ function deepEq(a, b, aStack, bStack) { while (length--) { // Deep compare each member key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; } } // Remove the first object from the stack of traversed objects. @@ -17155,6 +17144,11 @@ function isEqual(a, b) { return eq(a, b); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js + + + + // Retrieve all the enumerable property names of an object. function allKeys(obj) { if (!isObject(obj)) return []; @@ -17165,24 +17159,29 @@ function allKeys(obj) { return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js + + + + // Since the regular `Object.prototype.toString` type tests don't work for // some types in IE 11, we use a fingerprinting heuristic instead, based // on the methods. It's not great, but it's the best we got. // The fingerprint method lists are defined below. function ie11fingerprint(methods) { - var length = getLength(methods); + var length = _getLength(methods); return function(obj) { if (obj == null) return false; // `Map`, `WeakMap` and `Set` have no enumerable keys. var keys = allKeys(obj); - if (getLength(keys)) return false; + if (_getLength(keys)) return false; for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; + if (!modules_isFunction(obj[methods[i]])) return false; } // If we are testing against `WeakMap`, we need to ensure that // `obj` doesn't have a `forEach` method in order to distinguish // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } @@ -17199,13 +17198,34 @@ var mapMethods = commonInit.concat(forEachName, mapTail), weakMapMethods = commonInit.concat(mapTail), setMethods = ['add'].concat(commonInit, forEachName, hasName); -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js -var isWeakSet = tagTester('WeakSet'); // Retrieve the values of an object's properties. function values(obj) { @@ -17218,6 +17238,9 @@ function values(obj) { return values; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + // Convert an object into a list of `[key, value]` pairs. // The opposite of `_.object` with one argument. function pairs(obj) { @@ -17230,6 +17253,9 @@ function pairs(obj) { return pairs; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js + + // Invert the keys and values of an object. The values must be serializable. function invert(obj) { var result = {}; @@ -17240,15 +17266,19 @@ function invert(obj) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js + + // Return a sorted list of the function names available on the object. function functions(obj) { var names = []; for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); + if (modules_isFunction(obj[key])) names.push(key); } return names.sort(); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js // An internal function for creating assigner functions. function createAssigner(keysFunc, defaults) { return function(obj) { @@ -17268,16 +17298,32 @@ function createAssigner(keysFunc, defaults) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js + + + // Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); +/* harmony default export */ const extend = (createAssigner(allKeys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js + + // Assigns a given object with all the own properties in the passed-in // object(s). // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + // Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + // Create a naked function reference for surrogate-prototype-swapping. function ctor() { @@ -17295,6 +17341,10 @@ function baseCreate(prototype) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js + + + // Creates an object that inherits from the given prototype object. // If additional properties are provided then they will be added to the // created object. @@ -17304,12 +17354,18 @@ function create(prototype, props) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js + + + + // Create a (shallow-cloned) duplicate of an object. function clone(obj) { if (!isObject(obj)) return obj; return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17318,19 +17374,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17341,34 +17406,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17378,15 +17457,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17409,31 +17493,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17448,9 +17554,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17459,6 +17570,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17467,6 +17581,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17476,10 +17591,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17497,32 +17616,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17559,7 +17699,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17613,7 +17753,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17622,14 +17762,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17637,11 +17781,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17650,13 +17795,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17668,6 +17820,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17686,26 +17843,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17713,12 +17886,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17731,11 +17904,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17743,31 +17921,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17815,6 +18007,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17853,13 +18049,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17867,6 +18067,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17880,6 +18081,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17889,6 +18091,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17902,9 +18105,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17916,11 +18127,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17929,18 +18144,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17948,10 +18173,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17963,7 +18193,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17973,29 +18203,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -18003,7 +18256,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -18016,10 +18269,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -18029,12 +18287,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -18054,12 +18317,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -18071,15 +18344,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18088,10 +18371,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18100,20 +18388,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18128,25 +18428,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18166,12 +18480,18 @@ function max(obj, iteratee, context) { return result; } -// Return the minimum element (or element-based computation). -function min(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + +// Return the minimum element (or element-based computation). +function min(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18191,6 +18511,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18200,21 +18529,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18226,11 +18562,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18252,6 +18596,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18265,53 +18613,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18320,22 +18695,34 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + // Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in @@ -18344,6 +18731,9 @@ function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + // Get the first element of an array. Passing **n** will return the first N // values in the array. The **guard** check allows it to work with `_.map`. function first(array, n, guard) { @@ -18352,6 +18742,9 @@ function first(array, n, guard) { return initial(array, array.length - n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + // Returns everything but the first entry of the `array`. Especially useful on // the `arguments` object. Passing an **n** will return the rest N values in the // `array`. @@ -18359,6 +18752,9 @@ function rest(array, n, guard) { return slice.call(array, n == null || guard ? 1 : n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + // Get the last element of an array. Passing **n** will return the last N // values in the array. function last(array, n, guard) { @@ -18367,30 +18763,52 @@ function last(array, n, guard) { return rest(array, Math.max(0, array.length - n)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + // Trim out all falsy values from an array. function compact(array) { return filter(array, Boolean); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + // Flatten out an array, either recursively (by default), or up to `depth`. // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); +function flatten_flatten(array, depth) { + return flatten(array, depth, false); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + // Take the difference between one array and a number of other arrays. // Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); return filter(array, function(value){ return !contains(rest, value); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + // Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { return difference(array, otherArrays); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + // Produce a duplicate-free version of the array. If the array has already // been sorted, you have the option of using a faster algorithm. @@ -18406,7 +18824,7 @@ function uniq(array, isSorted, iteratee, context) { if (iteratee != null) iteratee = cb(iteratee, context); var result = []; var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var value = array[i], computed = iteratee ? iteratee(value, i, array) : value; if (isSorted && !iteratee) { @@ -18424,18 +18842,27 @@ function uniq(array, isSorted, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + // Produce an array that contains the union: each distinct element from all of // the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + // Produce an array that contains every item shared between all the // passed-in arrays. function intersection(array) { var result = []; var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var item = array[i]; if (contains(result, item)) continue; var j; @@ -18447,10 +18874,15 @@ function intersection(array) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + // Complement of zip. Unzip accepts an array of arrays and groups // each array's elements on shared indices. function unzip(array) { - var length = (array && max(array, getLength).length) || 0; + var length = (array && max(array, _getLength).length) || 0; var result = Array(length); for (var index = 0; index < length; index++) { @@ -18459,16 +18891,23 @@ function unzip(array) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + // Zip together multiple lists into a single array -- elements that share // an index go together. -var zip = restArguments(unzip); +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + // Converts lists into objects. Pass either a single array of `[key, value]` // pairs, or two parallel arrays of the same length -- one of keys, and one of // the corresponding values. Passing by pairs is the reverse of `_.pairs`. function object(list, values) { var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { + for (var i = 0, length = _getLength(list); i < length; i++) { if (values) { result[list[i]] = values[i]; } else { @@ -18478,6 +18917,7 @@ function object(list, values) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js // Generate an integer Array containing an arithmetic progression. A port of // the native Python `range()` function. See // [the Python documentation](https://docs.python.org/library/functions.html#range). @@ -18500,6 +18940,9 @@ function range(start, stop, step) { return range; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + // Chunk a single array into multiple arrays, each containing `count` or fewer // items. function chunk(array, count) { @@ -18512,28 +18955,44 @@ function chunk(array, count) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + // Helper function to continue chaining intermediate results. function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return instance._chain ? _(obj).chain() : obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + // Add your own custom functions to the Underscore object. function mixin(obj) { each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { + var func = _[name] = obj[name]; + _.prototype[name] = function() { var args = [this._wrapped]; push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); + return chainResult(this, func.apply(_, args)); }; }); - return _$1; + return _; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + // Add all mutator `Array` functions to the wrapper. each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) { method.apply(obj, arguments); @@ -18548,317 +19007,675 @@ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function( // Add all accessor `Array` functions to the wrapper. each(['concat', 'join', 'slice'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) obj = method.apply(obj, arguments); return chainResult(this, obj); }; }); +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js // Named Exports +// ============= -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. -// Default Export +// Baseline setup. -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map -/***/ }), +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -var underscoreNodeF = __nccwpck_require__(1641); -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js + + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('md5').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js + + +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js + + + +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return esm_node_stringify(rnds); +} + +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + + + + + + + + + +/***/ }), + +/***/ 2940: +/***/ ((module) => { + +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js index 708d001892c2..865379ac83fb 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js @@ -65,86 +65,77 @@ function getDeployMessage(deployer, deployVerb, prTitle) { * @param {String} message * @returns {Promise} */ -function commentPR(PR, message) { - return GithubUtils.createComment(context.repo.repo, PR, message) - .then(() => console.log(`Comment created on #${PR} successfully 🎉`)) - .catch((err) => { - console.log(`Unable to write comment on #${PR} 😞`); - core.setFailed(err.message); - }); +async function commentPR(PR, message) { + try { + await GithubUtils.createComment(context.repo.report, PR, message); + console.log(`Comment created on #${PR} successfully 🎉`); + } catch (err) { + console.log(`Unable to write comment on #${PR} 😞`); + core.setFailed(err.message); + } } -const run = function () { +const run = async function () { if (isProd) { - // First find the deployer (who closed the last deploy checklist)? - return GithubUtils.octokit.issues - .listForRepo({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - labels: CONST.LABELS.STAGING_DEPLOY, - state: 'closed', - }) - .then(({data}) => _.first(data).number) - .then((lastDeployChecklistNumber) => GithubUtils.getActorWhoClosedIssue(lastDeployChecklistNumber)) - .then((actor) => { - // Create comment on each pull request (one after another to avoid throttling issues) - const deployMessage = getDeployMessage(actor, 'Deployed'); - _.reduce(prList, (promise, pr) => promise.then(() => commentPR(pr, deployMessage)), Promise.resolve()); - }); + // Find the previous deploy checklist + const {data: deployChecklists} = await GithubUtils.octokit.issues.listForRepo({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + labels: CONST.LABELS.STAGING_DEPLOY, + state: 'closed', + }); + const previousChecklistID = _.first(deployChecklists).number; + + // who closed the last deploy checklist? + const deployer = await GithubUtils.getActorWhoClosedIssue(previousChecklistID); + + // Create comment on each pull request (one at a time to avoid throttling issues) + const deployMessage = getDeployMessage(deployer, 'Deployed'); + for (const pr of prList) { + await commentPR(pr, deployMessage); + } + return; } // First find out if this is a normal staging deploy or a CP by looking at the commit message on the tag - return GithubUtils.octokit.repos - .listTags({ + const {data: recentTags} = await GithubUtils.octokit.repos.listTags({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + per_page: 100, + }); + const currentTag = _.find(recentTags, (tag) => tag.name === version); + if (!currentTag) { + const err = `Could not find tag matching ${version}`; + console.error(err); + core.setFailed(err); + return; + } + const commitMessage = ( + await GithubUtils.octokit.git.getCommit({ owner: CONST.GITHUB_OWNER, repo: CONST.APP_REPO, - per_page: 100, - }) - .then(({data}) => { - const tagSHA = _.find(data, (tag) => tag.name === version).commit.sha; - return GithubUtils.octokit.git.getCommit({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - commit_sha: tagSHA, - }); + commit_sha: currentTag.commit.sha, }) - .then(({data}) => { - const isCP = /Merge pull request #\d+ from Expensify\/.*-?cherry-pick-staging-\d+/.test(data.message); - _.reduce( - prList, - (promise, PR) => - promise - - // Then, for each PR, find out who merged it and determine the deployer - .then(() => - GithubUtils.octokit.pulls.get({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - pull_number: PR, - }), - ) - .then((response) => { - /* - * The deployer for staging deploys is: - * 1. For regular staging deploys, the person who merged the PR. - * 2. For automatic CPs (using the label), the person who merged the PR. - * 3. For manual CPs (using the GH UI), the person who triggered the workflow - * (reflected in the branch name). - */ - let deployer = lodashGet(response, 'data.merged_by.login', ''); - const issueTitle = lodashGet(response, 'data.title', ''); - const CPActorMatches = data.message.match(/Merge pull request #\d+ from Expensify\/(.+)-cherry-pick-staging-\d+/); - if (_.isArray(CPActorMatches) && CPActorMatches.length === 2 && CPActorMatches[1] !== CONST.OS_BOTIFY) { - deployer = CPActorMatches[1]; - } - - // Finally, comment on the PR - const deployMessage = getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', issueTitle); - return commentPR(PR, deployMessage); - }), - Promise.resolve(), - ); + ).data.message; + const isCP = /[\S\s]*\(cherry picked from commit .*\)/.test(commitMessage); + + for (const prNumber of prList) { + /* + * Determine who the deployer for the PR is. The "deployer" for staging deploys is: + * 1. For regular staging deploys, the person who merged the PR. + * 2. For CPs, the person who triggered the workflow (documented in the cherry-pick commit message) + */ + const {data: pr} = await GithubUtils.octokit.pulls.get({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + pull_number: prNumber, }); + const deployer = isCP ? commitMessage.match(/\(cherry picked from commit \w*(?: by (.*))?[)]/)[1] || CONST.OS_BOTIFY : pr.merged_by.login; + + const title = pr.title; + const deployMessage = getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', title); + await commentPR(prNumber, deployMessage); + } }; if (require.main === module) { diff --git a/.github/actions/javascript/postTestBuildComment/index.js b/.github/actions/javascript/postTestBuildComment/index.js index 5da6c7ed667a..0537f1a22430 100644 --- a/.github/actions/javascript/postTestBuildComment/index.js +++ b/.github/actions/javascript/postTestBuildComment/index.js @@ -105,7 +105,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16117,1066 +16117,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17185,19 +17250,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17208,34 +17282,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17245,15 +17333,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17276,31 +17369,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17315,9 +17430,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17326,6 +17446,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17334,6 +17457,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17343,10 +17467,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17364,32 +17492,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17426,7 +17575,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17480,7 +17629,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17489,14 +17638,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17504,11 +17657,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17517,13 +17671,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17535,6 +17696,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17553,26 +17719,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17580,12 +17762,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17598,11 +17780,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17610,31 +17797,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17682,6 +17883,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17720,13 +17925,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17734,6 +17943,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17747,6 +17957,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17756,6 +17967,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17769,9 +17981,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17783,11 +18003,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17796,18 +18020,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17815,10 +18049,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17830,7 +18069,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17840,29 +18079,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17870,7 +18132,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17883,10 +18145,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17896,12 +18163,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17921,12 +18193,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17938,15 +18220,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17955,10 +18247,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17967,20 +18264,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17995,25 +18304,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18033,12 +18356,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18058,6 +18387,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18067,21 +18405,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18093,11 +18438,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18119,6 +18472,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18132,53 +18489,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18187,545 +18571,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/reopenIssueWithComment/index.js b/.github/actions/javascript/reopenIssueWithComment/index.js index 3efa2664a4c5..9c4532794ad1 100644 --- a/.github/actions/javascript/reopenIssueWithComment/index.js +++ b/.github/actions/javascript/reopenIssueWithComment/index.js @@ -74,7 +74,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16042,1066 +16042,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17110,19 +17175,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17133,34 +17207,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17170,15 +17258,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17201,31 +17294,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17240,9 +17355,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17251,6 +17371,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17259,6 +17382,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17268,10 +17392,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17289,32 +17417,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17351,7 +17500,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17405,7 +17554,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17414,14 +17563,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17429,11 +17582,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17442,13 +17596,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17460,6 +17621,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17478,26 +17644,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17505,12 +17687,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17523,11 +17705,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17535,31 +17722,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17607,6 +17808,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17645,13 +17850,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17659,6 +17868,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17672,6 +17882,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17681,6 +17892,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17694,9 +17906,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17708,11 +17928,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17721,18 +17945,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17740,10 +17974,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17755,7 +17994,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17765,29 +18004,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17795,7 +18057,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17808,10 +18070,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17821,12 +18088,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17846,12 +18118,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17863,15 +18145,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17880,10 +18172,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17892,20 +18189,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17920,25 +18229,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17958,12 +18281,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -17983,6 +18312,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -17992,21 +18330,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18018,11 +18363,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18044,6 +18397,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18057,53 +18414,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18112,545 +18496,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/reviewerChecklist/index.js b/.github/actions/javascript/reviewerChecklist/index.js index fc4ba728220b..3e8d06bf4e49 100644 --- a/.github/actions/javascript/reviewerChecklist/index.js +++ b/.github/actions/javascript/reviewerChecklist/index.js @@ -140,7 +140,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16152,1066 +16152,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17220,19 +17285,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17243,34 +17317,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17280,15 +17368,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17311,31 +17404,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17350,9 +17465,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17361,6 +17481,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17369,6 +17492,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17378,10 +17502,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17399,32 +17527,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17461,7 +17610,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17515,7 +17664,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17524,14 +17673,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17539,11 +17692,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17552,13 +17706,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17570,6 +17731,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17588,26 +17754,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17615,12 +17797,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17633,11 +17815,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17645,31 +17832,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17717,6 +17918,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17755,13 +17960,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17769,6 +17978,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17782,6 +17992,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17791,6 +18002,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17804,9 +18016,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17818,11 +18038,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17831,18 +18055,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17850,10 +18084,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17865,7 +18104,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17875,29 +18114,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17905,7 +18167,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17918,10 +18180,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17931,12 +18198,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17956,12 +18228,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17973,15 +18255,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17990,10 +18282,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18002,20 +18299,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18030,25 +18339,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18068,12 +18391,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18093,6 +18422,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18102,21 +18440,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18128,11 +18473,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18154,6 +18507,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18167,53 +18524,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18222,545 +18606,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/verifySignedCommits/index.js b/.github/actions/javascript/verifySignedCommits/index.js index df8ca5b31bad..f96b2f7defe6 100644 --- a/.github/actions/javascript/verifySignedCommits/index.js +++ b/.github/actions/javascript/verifySignedCommits/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 5740: /***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const github = __nccwpck_require__(5438); const CONST = __nccwpck_require__(4097); @@ -63,7 +63,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -16075,1066 +16075,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17143,19 +17208,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17166,34 +17240,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17203,15 +17291,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17234,31 +17327,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17273,9 +17388,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17284,6 +17404,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17292,6 +17415,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17301,10 +17425,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17322,32 +17450,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17384,7 +17533,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17438,7 +17587,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17447,14 +17596,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17462,11 +17615,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17475,13 +17629,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17493,6 +17654,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17511,26 +17677,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17538,12 +17720,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17556,11 +17738,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17568,31 +17755,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17640,6 +17841,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17678,13 +17883,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17692,6 +17901,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17705,6 +17915,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17714,6 +17925,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17727,9 +17939,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17741,11 +17961,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17754,18 +17978,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17773,10 +18007,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17788,7 +18027,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17798,29 +18037,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17828,7 +18090,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17841,10 +18103,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17854,12 +18121,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17879,12 +18151,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17896,15 +18178,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17913,10 +18205,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17925,20 +18222,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17953,25 +18262,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17991,12 +18314,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18016,6 +18345,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18025,21 +18363,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18051,11 +18396,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18077,6 +18430,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18090,53 +18447,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18145,545 +18529,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), From 26768ae8b14481d8a8a93cfc1df8a310a1458f5f Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 15:01:35 +0300 Subject: [PATCH 057/315] Small adjustments. --- src/components/ReportActionItem/MoneyRequestPreview.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js index 3791518ac531..c83742ce6543 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview.js +++ b/src/components/ReportActionItem/MoneyRequestPreview.js @@ -174,8 +174,8 @@ function MoneyRequestPreview(props) { else if (widthDifference > 350) toSubstract = 2; } - // requestAmount also includes digits after ".", so "10000.00" qualifies. - if (requestAmount >= 1000000) toSubstract += 2; + // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. + if (requestAmount >= 100000000) toSubstract += 2; return toSubstract; }; @@ -279,7 +279,7 @@ function MoneyRequestPreview(props) { styles.moneyRequestPreviewAmount, StyleUtils.getFontSizeStyle(variables.fontSizeXLarge - getFontSizeToSubstract()), ]} - maxNumberOfLines={2} + maxNumberOfLines={3} > {getDisplayAmountText()} From a985412d8f1284ea43ec9abec52a93c5a09f0b02 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 15:57:36 +0300 Subject: [PATCH 058/315] Also reduced the lineHeight. --- android/settings.gradle | 9 --------- src/components/ReportActionItem/MoneyRequestPreview.js | 9 +++++---- src/styles/styles.js | 1 - 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/android/settings.gradle b/android/settings.gradle index c2bb3db7845a..680dfbc32521 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -16,12 +16,3 @@ project(':react-native-dev-menu').projectDir = new File(rootProject.projectDir, apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' includeBuild('../node_modules/@react-native/gradle-plugin') - -includeBuild('../node_modules/react-native') { - dependencySubstitution { - substitute(module("com.facebook.react:react-android")).using(project(":packages:react-native:ReactAndroid")) - substitute(module("com.facebook.react:react-native")).using(project(":packages:react-native:ReactAndroid")) - substitute(module("com.facebook.react:hermes-android")).using(project(":packages:react-native:ReactAndroid:hermes-engine")) - substitute(module("com.facebook.react:hermes-engine")).using(project(":packages:react-native:ReactAndroid:hermes-engine")) - } -} diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js index c83742ce6543..e9c112004640 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview.js +++ b/src/components/ReportActionItem/MoneyRequestPreview.js @@ -164,8 +164,8 @@ function MoneyRequestPreview(props) { description = props.transaction.merchant; } - // Prevents large amounts from being cropped on small screens - const getFontSizeToSubstract = () => { + // Prevents large amounts from being cut off on small screen widths. + const getFontSizeAndLineHeightToSubtract = () => { let toSubstract = 0; if (isSmallScreenWidth) { const widthDifference = variables.mobileResponsiveWidthBreakpoint - windowWidth; @@ -176,7 +176,7 @@ function MoneyRequestPreview(props) { // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. if (requestAmount >= 100000000) toSubstract += 2; - + return toSubstract; }; @@ -277,7 +277,8 @@ function MoneyRequestPreview(props) { diff --git a/src/styles/styles.js b/src/styles/styles.js index 0415024617ae..1218a06b2587 100644 --- a/src/styles/styles.js +++ b/src/styles/styles.js @@ -2685,7 +2685,6 @@ const styles = { ...headlineFont, ...whiteSpace.preWrap, color: themeColors.heading, - lineHeight: variables.lineHeightXXLarge, }, defaultCheckmarkWrapper: { From f4f17b3d3abb56d1549635ac47d78ac17c49441c Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 15:59:34 +0300 Subject: [PATCH 059/315] Restore settings gradle file changes which should have remaned only on the local device. --- android/settings.gradle | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/android/settings.gradle b/android/settings.gradle index 680dfbc32521..c2bb3db7845a 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -16,3 +16,12 @@ project(':react-native-dev-menu').projectDir = new File(rootProject.projectDir, apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' includeBuild('../node_modules/@react-native/gradle-plugin') + +includeBuild('../node_modules/react-native') { + dependencySubstitution { + substitute(module("com.facebook.react:react-android")).using(project(":packages:react-native:ReactAndroid")) + substitute(module("com.facebook.react:react-native")).using(project(":packages:react-native:ReactAndroid")) + substitute(module("com.facebook.react:hermes-android")).using(project(":packages:react-native:ReactAndroid:hermes-engine")) + substitute(module("com.facebook.react:hermes-engine")).using(project(":packages:react-native:ReactAndroid:hermes-engine")) + } +} From 11c73f0d47c0177f596dc4d5b3ea70c8a8ec0dd0 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 16:04:43 +0300 Subject: [PATCH 060/315] Fix lint: useWindowDimensions is called conditionally. --- src/components/ReportActionItem/MoneyRequestPreview.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js index e9c112004640..05cee7c28d89 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview.js +++ b/src/components/ReportActionItem/MoneyRequestPreview.js @@ -133,12 +133,12 @@ const defaultProps = { }; function MoneyRequestPreview(props) { + const {isSmallScreenWidth, windowWidth} = useWindowDimensions(); + if (_.isEmpty(props.iouReport) && !props.isBillSplit) { return null; } - const {isSmallScreenWidth, windowWidth} = useWindowDimensions(); - const sessionAccountID = lodashGet(props.session, 'accountID', null); const managerID = props.iouReport.managerID || ''; const ownerAccountID = props.iouReport.ownerAccountID || ''; From f3b209dccf0a701ae0ca553cbce6b1dde7fa9488 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 16:06:25 +0300 Subject: [PATCH 061/315] Fixed spelling mistake. --- .../ReportActionItem/MoneyRequestPreview.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js index 05cee7c28d89..9df3ccb06428 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview.js +++ b/src/components/ReportActionItem/MoneyRequestPreview.js @@ -166,18 +166,18 @@ function MoneyRequestPreview(props) { // Prevents large amounts from being cut off on small screen widths. const getFontSizeAndLineHeightToSubtract = () => { - let toSubstract = 0; + let toSubtract = 0; if (isSmallScreenWidth) { const widthDifference = variables.mobileResponsiveWidthBreakpoint - windowWidth; - if (widthDifference > 450) toSubstract = 9; - else if (widthDifference > 400) toSubstract = 6; - else if (widthDifference > 350) toSubstract = 2; + if (widthDifference > 450) toSubtract = 9; + else if (widthDifference > 400) toSubtract = 6; + else if (widthDifference > 350) toSubtract = 2; } // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. - if (requestAmount >= 100000000) toSubstract += 2; + if (requestAmount >= 100000000) toSubtract += 2; - return toSubstract; + return toSubtract; }; const getSettledMessage = () => { From 819a769cc89e96bbdb127eda8771c5ddde9c6caa Mon Sep 17 00:00:00 2001 From: Pierre Michel Date: Wed, 30 Aug 2023 07:17:44 -0600 Subject: [PATCH 062/315] Subscribe to top most report changes because the keyboard avoiding view depends on it and the composer was hidden behind keyboard Signed-off-by: Pierre Michel --- src/pages/home/ReportScreen.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index 6daa15785921..5ef8011c0aeb 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -37,6 +37,7 @@ import ReportScreenContext from './ReportScreenContext'; import TaskHeaderActionButton from '../../components/TaskHeaderActionButton'; import DragAndDropProvider from '../../components/DragAndDrop/Provider'; import usePrevious from '../../hooks/usePrevious'; +import withCurrentReportID from '../../components/withCurrentReportID'; const propTypes = { /** Navigation route context info provided by react navigation */ @@ -396,6 +397,7 @@ export default compose( withLocalize, withWindowDimensions, withNetwork(), + withCurrentReportID, withOnyx({ isSidebarLoaded: { key: ONYXKEYS.IS_SIDEBAR_LOADED, From c9d29ebfca7490f4476153f0e00e66b5806422eb Mon Sep 17 00:00:00 2001 From: Mahesh Vagicherla Date: Wed, 30 Aug 2023 18:55:55 +0530 Subject: [PATCH 063/315] added comment --- src/libs/actions/User.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index eca1fa8a496e..5b3a7f86bc0d 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -71,7 +71,7 @@ function closeAccount(message) { ], }, ); - // Clear all the listeners/callback that are registered while logged-in + // Removing callbacks/listener which are added after login. Fixes the issue user's not able to login after app came to active from inactive redirectToSignIn(); } From 4e7022870831a82af3c6daefee237a7dba6b60ca Mon Sep 17 00:00:00 2001 From: Mahesh Vagicherla <59088937+b4s36t4@users.noreply.github.com> Date: Wed, 30 Aug 2023 19:04:33 +0530 Subject: [PATCH 064/315] Update src/libs/actions/User.js Co-authored-by: Joel Davies --- src/libs/actions/User.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index 5b3a7f86bc0d..c09ee4baac1b 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -71,7 +71,7 @@ function closeAccount(message) { ], }, ); - // Removing callbacks/listener which are added after login. Fixes the issue user's not able to login after app came to active from inactive + // Run cleanup actions to prevent reconnection callbacks from blocking logging in again redirectToSignIn(); } From b52347d5a0e3090d3faab44a822fd3979be467de Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 30 Aug 2023 15:43:29 +0200 Subject: [PATCH 065/315] Reimplement and simplify createOrUpdateStagingDeployCash --- .../createOrUpdateStagingDeploy.js | 230 ++++++++---------- .../createOrUpdateStagingDeploy/index.js | 229 ++++++++--------- .../getDeployPullRequestList/index.js | 5 +- .github/libs/GitUtils.js | 5 +- tests/unit/createOrUpdateStagingDeployTest.js | 16 +- 5 files changed, 203 insertions(+), 282 deletions(-) diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.js b/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.js index a514f8a9bcab..31ce88d3d775 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.js +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.js @@ -5,166 +5,126 @@ const CONST = require('../../../libs/CONST'); const GithubUtils = require('../../../libs/GithubUtils'); const GitUtils = require('../../../libs/GitUtils'); -const run = function () { +const run = async function () { const newVersion = core.getInput('NPM_VERSION'); console.log('New version found from action input:', newVersion); - let shouldCreateNewStagingDeployCash = false; - let newTag = newVersion; - let newDeployBlockers = []; - let previousStagingDeployCashData = {}; - let currentStagingDeployCashData = null; - - // Start by fetching the list of recent StagingDeployCash issues, along with the list of open deploy blockers - return Promise.all([ - GithubUtils.octokit.issues.listForRepo({ + try { + // Start by fetching the list of recent StagingDeployCash issues, along with the list of open deploy blockers + const {data: recentDeployChecklists} = await GithubUtils.octokit.issues.listForRepo({ log: console, owner: CONST.GITHUB_OWNER, repo: CONST.APP_REPO, labels: CONST.LABELS.STAGING_DEPLOY, state: 'all', - }), - GithubUtils.octokit.issues.listForRepo({ - log: console, - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - labels: CONST.LABELS.DEPLOY_BLOCKER, - }), - ]) - .then(([stagingDeployResponse, deployBlockerResponse]) => { - if (!stagingDeployResponse || !stagingDeployResponse.data || _.isEmpty(stagingDeployResponse.data)) { - console.error('Failed fetching StagingDeployCash issues from Github!', stagingDeployResponse); - throw new Error('Failed fetching StagingDeployCash issues from Github'); - } - - if (!deployBlockerResponse || !deployBlockerResponse.data) { - console.log('Failed fetching DeployBlockerCash issues from Github, continuing...'); - } - - newDeployBlockers = _.map(deployBlockerResponse.data, ({html_url}) => ({ - url: html_url, - number: GithubUtils.getIssueOrPullRequestNumberFromURL(html_url), - isResolved: false, - })); - - // Look at the state of the most recent StagingDeployCash, - // if it is open then we'll update the existing one, otherwise, we'll create a new one. - shouldCreateNewStagingDeployCash = Boolean(stagingDeployResponse.data[0].state !== 'open'); - if (shouldCreateNewStagingDeployCash) { - console.log('Latest StagingDeployCash is closed, creating a new one.', stagingDeployResponse.data[0]); - } else { - console.log( - 'Latest StagingDeployCash is open, updating it instead of creating a new one.', - 'Current:', - stagingDeployResponse.data[0], - 'Previous:', - stagingDeployResponse.data[1], - ); - } - - // Parse the data from the previous StagingDeployCash - // (newest if there are none open, otherwise second-newest) - previousStagingDeployCashData = shouldCreateNewStagingDeployCash - ? GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[0]) - : GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[1]); - - console.log('Found tag of previous StagingDeployCash:', previousStagingDeployCashData.tag); - - // Find the list of PRs merged between the last StagingDeployCash and the new version - if (shouldCreateNewStagingDeployCash) { - return GitUtils.getPullRequestsMergedBetween(previousStagingDeployCashData.tag, newTag); - } - - currentStagingDeployCashData = GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[0]); - console.log('Parsed the following data from the current StagingDeployCash:', currentStagingDeployCashData); - - // If we aren't sent a tag, then use the existing tag - newTag = newTag || currentStagingDeployCashData.tag; - - return GitUtils.getPullRequestsMergedBetween(previousStagingDeployCashData.tag, newTag); - }) - .then((mergedPRs) => { - console.log(`The following PRs have been merged between the previous StagingDeployCash (${previousStagingDeployCashData.tag}) and new version (${newVersion}):`, mergedPRs); - - if (shouldCreateNewStagingDeployCash) { - return GithubUtils.generateStagingDeployCashBody(newTag, _.map(mergedPRs, GithubUtils.getPullRequestURLFromNumber)); - } - - const didVersionChange = newVersion ? newVersion !== currentStagingDeployCashData.tag : false; - - // Generate the PR list, preserving the previous state of `isVerified` for existing PRs - const PRList = _.sortBy( - _.unique( - _.union( - currentStagingDeployCashData.PRList, - _.map(mergedPRs, (number) => ({ - number: Number.parseInt(number, 10), - url: GithubUtils.getPullRequestURLFromNumber(number), + }); - // Since this is the second argument to _.union, - // it will appear later in the array than any duplicate. - // Since it is later in the array, it will be truncated by _.unique, - // and the original value of isVerified will be preserved. - isVerified: false, - })), - ), - false, - (item) => item.number, - ), - 'number', + // Look at the state of the most recent StagingDeployCash, + // if it is open then we'll update the existing one, otherwise, we'll create a new one. + const mostRecentChecklist = recentDeployChecklists[0]; + const shouldCreateNewDeployChecklist = mostRecentChecklist.state !== 'open'; + const previousChecklist = shouldCreateNewDeployChecklist ? mostRecentChecklist : recentDeployChecklists[1]; + if (shouldCreateNewDeployChecklist) { + console.log('Latest StagingDeployCash is closed, creating a new one.', mostRecentChecklist); + } else { + console.log('Latest StagingDeployCash is open, updating it instead of creating a new one.', 'Current:', mostRecentChecklist, 'Previous:', previousChecklist); + } + + // Parse the data from the previous and current checklists into the format used to generate the checklist + const previousChecklistData = GithubUtils.getStagingDeployCashData(previousChecklist); + const currentChecklistData = shouldCreateNewDeployChecklist ? {} : GithubUtils.getStagingDeployCashData(mostRecentChecklist); + + // Find the list of PRs merged between the current checklist and the previous checklist + // Note that any time we're creating a new checklist we MUST have `NPM_VERSION` passed in as an input + const newTag = newVersion || _.get(currentChecklistData, 'tag'); + const mergedPRs = await GitUtils.getPullRequestsMergedBetween(previousChecklistData.tag, newTag); + + // Next, we generate the checklist body + let checklistBody = ''; + if (shouldCreateNewDeployChecklist) { + checklistBody = await GithubUtils.generateStagingDeployCashBody(newTag, _.map(mergedPRs, GithubUtils.getPullRequestURLFromNumber)); + } else { + // Generate the updated PR list, preserving the previous state of `isVerified` for existing PRs + const PRList = _.reduce( + mergedPRs, + (memo, prNum) => { + const indexOfPRInCurrentChecklist = _.findIndex(currentChecklistData.PRList, (pr) => pr.number === prNum); + const isVerified = indexOfPRInCurrentChecklist >= 0 ? currentChecklistData.PRList[indexOfPRInCurrentChecklist].isVerified : false; + memo.push({ + number: prNum, + url: GithubUtils.getPullRequestURLFromNumber(prNum), + isVerified, + }); + return memo; + }, + [], ); // Generate the deploy blocker list, preserving the previous state of `isResolved` - const deployBlockers = _.sortBy( - _.unique(_.union(currentStagingDeployCashData.deployBlockers, newDeployBlockers), false, (item) => item.number), - 'number', + const {data: openDeployBlockers} = await GithubUtils.octokit.issues.listForRepo({ + log: console, + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + labels: CONST.LABELS.DEPLOY_BLOCKER, + }); + const deployBlockers = _.reduce( + openDeployBlockers, + (memo, deployBlocker) => { + const {html_url, number} = deployBlocker; + const indexInCurrentChecklist = _.findIndex(currentChecklistData.deployBlockers, (item) => item.number === number); + const isResolved = indexInCurrentChecklist >= 0 ? currentChecklistData.deployBlockers[indexInCurrentChecklist].isResolved : false; + memo.push({ + number, + url: html_url, + isResolved, + }); + return memo; + }, + [], ); - // Get the internalQA PR list, preserving the previous state of `isResolved` - const internalQAPRList = _.sortBy(currentStagingDeployCashData.internalQAPRList, 'number'); - - return GithubUtils.generateStagingDeployCashBody( + const didVersionChange = newVersion ? newVersion !== currentChecklistData.tag : false; + checklistBody = await GithubUtils.generateStagingDeployCashBody( newTag, _.pluck(PRList, 'url'), _.pluck(_.where(PRList, {isVerified: true}), 'url'), _.pluck(deployBlockers, 'url'), _.pluck(_.where(deployBlockers, {isResolved: true}), 'url'), - _.pluck(_.where(internalQAPRList, {isResolved: true}), 'url'), - didVersionChange ? false : currentStagingDeployCashData.isTimingDashboardChecked, - didVersionChange ? false : currentStagingDeployCashData.isFirebaseChecked, - didVersionChange ? false : currentStagingDeployCashData.isGHStatusChecked, + _.pluck(_.where(currentChecklistData.internalQAPRList, {isResolved: true}), 'url'), + didVersionChange ? false : currentChecklistData.isTimingDashboardChecked, + didVersionChange ? false : currentChecklistData.isFirebaseChecked, + didVersionChange ? false : currentChecklistData.isGHStatusChecked, ); - }) - .then((body) => { - const defaultPayload = { - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - body, - }; + } - if (shouldCreateNewStagingDeployCash) { - return GithubUtils.octokit.issues.create({ - ...defaultPayload, - title: `Deploy Checklist: New Expensify ${moment().format('YYYY-MM-DD')}`, - labels: [CONST.LABELS.STAGING_DEPLOY], - assignees: [CONST.APPLAUSE_BOT], - }); - } + // Finally, create or update the checklist + const defaultPayload = { + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + body: checklistBody, + }; - return GithubUtils.octokit.issues.update({ + if (shouldCreateNewDeployChecklist) { + const {data: newChecklist} = await GithubUtils.octokit.issues.create({ ...defaultPayload, - issue_number: currentStagingDeployCashData.number, + title: `Deploy Checklist: New Expensify ${moment().format('YYYY-MM-DD')}`, + labels: [CONST.LABELS.STAGING_DEPLOY], + assignees: [CONST.APPLAUSE_BOT], }); - }) - .then(({data}) => { - // eslint-disable-next-line max-len - console.log(`Successfully ${shouldCreateNewStagingDeployCash ? 'created new' : 'updated'} StagingDeployCash! 🎉 ${data.html_url}`); - return data; - }) - .catch((err) => { - console.error('An unknown error occurred!', err); - core.setFailed(err); + console.log(`Successfully created new StagingDeployCash! 🎉 ${newChecklist.html_url}`); + return newChecklist; + } + + const {data: updatedChecklist} = await GithubUtils.octokit.issues.update({ + ...defaultPayload, + issue_number: currentChecklistData.number, }); + console.log(`Successfully updated StagingDeployCash! 🎉 ${updatedChecklist.html_url}`); + return updatedChecklist; + } catch (err) { + console.error('An unknown error occurred!', err); + core.setFailed(err); + } }; if (require.main === module) { diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js index d774a73eb23c..2313925146d1 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js @@ -15,166 +15,126 @@ const CONST = __nccwpck_require__(4097); const GithubUtils = __nccwpck_require__(7999); const GitUtils = __nccwpck_require__(669); -const run = function () { +const run = async function () { const newVersion = core.getInput('NPM_VERSION'); console.log('New version found from action input:', newVersion); - let shouldCreateNewStagingDeployCash = false; - let newTag = newVersion; - let newDeployBlockers = []; - let previousStagingDeployCashData = {}; - let currentStagingDeployCashData = null; - - // Start by fetching the list of recent StagingDeployCash issues, along with the list of open deploy blockers - return Promise.all([ - GithubUtils.octokit.issues.listForRepo({ + try { + // Start by fetching the list of recent StagingDeployCash issues, along with the list of open deploy blockers + const {data: recentDeployChecklists} = await GithubUtils.octokit.issues.listForRepo({ log: console, owner: CONST.GITHUB_OWNER, repo: CONST.APP_REPO, labels: CONST.LABELS.STAGING_DEPLOY, state: 'all', - }), - GithubUtils.octokit.issues.listForRepo({ - log: console, - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - labels: CONST.LABELS.DEPLOY_BLOCKER, - }), - ]) - .then(([stagingDeployResponse, deployBlockerResponse]) => { - if (!stagingDeployResponse || !stagingDeployResponse.data || _.isEmpty(stagingDeployResponse.data)) { - console.error('Failed fetching StagingDeployCash issues from Github!', stagingDeployResponse); - throw new Error('Failed fetching StagingDeployCash issues from Github'); - } - - if (!deployBlockerResponse || !deployBlockerResponse.data) { - console.log('Failed fetching DeployBlockerCash issues from Github, continuing...'); - } - - newDeployBlockers = _.map(deployBlockerResponse.data, ({html_url}) => ({ - url: html_url, - number: GithubUtils.getIssueOrPullRequestNumberFromURL(html_url), - isResolved: false, - })); - - // Look at the state of the most recent StagingDeployCash, - // if it is open then we'll update the existing one, otherwise, we'll create a new one. - shouldCreateNewStagingDeployCash = Boolean(stagingDeployResponse.data[0].state !== 'open'); - if (shouldCreateNewStagingDeployCash) { - console.log('Latest StagingDeployCash is closed, creating a new one.', stagingDeployResponse.data[0]); - } else { - console.log( - 'Latest StagingDeployCash is open, updating it instead of creating a new one.', - 'Current:', - stagingDeployResponse.data[0], - 'Previous:', - stagingDeployResponse.data[1], - ); - } - - // Parse the data from the previous StagingDeployCash - // (newest if there are none open, otherwise second-newest) - previousStagingDeployCashData = shouldCreateNewStagingDeployCash - ? GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[0]) - : GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[1]); - - console.log('Found tag of previous StagingDeployCash:', previousStagingDeployCashData.tag); - - // Find the list of PRs merged between the last StagingDeployCash and the new version - if (shouldCreateNewStagingDeployCash) { - return GitUtils.getPullRequestsMergedBetween(previousStagingDeployCashData.tag, newTag); - } - - currentStagingDeployCashData = GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[0]); - console.log('Parsed the following data from the current StagingDeployCash:', currentStagingDeployCashData); + }); - // If we aren't sent a tag, then use the existing tag - newTag = newTag || currentStagingDeployCashData.tag; + // Look at the state of the most recent StagingDeployCash, + // if it is open then we'll update the existing one, otherwise, we'll create a new one. + const mostRecentChecklist = recentDeployChecklists[0]; + const shouldCreateNewDeployChecklist = mostRecentChecklist.state !== 'open'; + const previousChecklist = shouldCreateNewDeployChecklist ? mostRecentChecklist : recentDeployChecklists[1]; + if (shouldCreateNewDeployChecklist) { + console.log('Latest StagingDeployCash is closed, creating a new one.', mostRecentChecklist); + } else { + console.log('Latest StagingDeployCash is open, updating it instead of creating a new one.', 'Current:', mostRecentChecklist, 'Previous:', previousChecklist); + } - return GitUtils.getPullRequestsMergedBetween(previousStagingDeployCashData.tag, newTag); - }) - .then((mergedPRs) => { - console.log(`The following PRs have been merged between the previous StagingDeployCash (${previousStagingDeployCashData.tag}) and new version (${newVersion}):`, mergedPRs); + // Parse the data from the previous and current checklists into the format used to generate the checklist + const previousChecklistData = GithubUtils.getStagingDeployCashData(previousChecklist); + const currentChecklistData = shouldCreateNewDeployChecklist ? {} : GithubUtils.getStagingDeployCashData(mostRecentChecklist); - if (shouldCreateNewStagingDeployCash) { - return GithubUtils.generateStagingDeployCashBody(newTag, _.map(mergedPRs, GithubUtils.getPullRequestURLFromNumber)); - } + // Find the list of PRs merged between the current checklist and the previous checklist + // Note that any time we're creating a new checklist we MUST have `NPM_VERSION` passed in as an input + const newTag = newVersion || _.get(currentChecklistData, 'tag'); + const mergedPRs = await GitUtils.getPullRequestsMergedBetween(previousChecklistData.tag, newTag); - const didVersionChange = newVersion ? newVersion !== currentStagingDeployCashData.tag : false; - - // Generate the PR list, preserving the previous state of `isVerified` for existing PRs - const PRList = _.sortBy( - _.unique( - _.union( - currentStagingDeployCashData.PRList, - _.map(mergedPRs, (number) => ({ - number: Number.parseInt(number, 10), - url: GithubUtils.getPullRequestURLFromNumber(number), - - // Since this is the second argument to _.union, - // it will appear later in the array than any duplicate. - // Since it is later in the array, it will be truncated by _.unique, - // and the original value of isVerified will be preserved. - isVerified: false, - })), - ), - false, - (item) => item.number, - ), - 'number', + // Next, we generate the checklist body + let checklistBody = ''; + if (shouldCreateNewDeployChecklist) { + checklistBody = await GithubUtils.generateStagingDeployCashBody(newTag, _.map(mergedPRs, GithubUtils.getPullRequestURLFromNumber)); + } else { + // Generate the updated PR list, preserving the previous state of `isVerified` for existing PRs + const PRList = _.reduce( + mergedPRs, + (memo, prNum) => { + const indexOfPRInCurrentChecklist = _.findIndex(currentChecklistData.PRList, (pr) => pr.number === prNum); + const isVerified = indexOfPRInCurrentChecklist >= 0 ? currentChecklistData.PRList[indexOfPRInCurrentChecklist].isVerified : false; + memo.push({ + number: prNum, + url: GithubUtils.getPullRequestURLFromNumber(prNum), + isVerified, + }); + return memo; + }, + [], ); // Generate the deploy blocker list, preserving the previous state of `isResolved` - const deployBlockers = _.sortBy( - _.unique(_.union(currentStagingDeployCashData.deployBlockers, newDeployBlockers), false, (item) => item.number), - 'number', + const {data: openDeployBlockers} = await GithubUtils.octokit.issues.listForRepo({ + log: console, + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + labels: CONST.LABELS.DEPLOY_BLOCKER, + }); + const deployBlockers = _.reduce( + openDeployBlockers, + (memo, deployBlocker) => { + const {html_url, number} = deployBlocker; + const indexInCurrentChecklist = _.findIndex(currentChecklistData.deployBlockers, (item) => item.number === number); + const isResolved = indexInCurrentChecklist >= 0 ? currentChecklistData.deployBlockers[indexInCurrentChecklist].isResolved : false; + memo.push({ + number, + url: html_url, + isResolved, + }); + return memo; + }, + [], ); - // Get the internalQA PR list, preserving the previous state of `isResolved` - const internalQAPRList = _.sortBy(currentStagingDeployCashData.internalQAPRList, 'number'); - - return GithubUtils.generateStagingDeployCashBody( + const didVersionChange = newVersion ? newVersion !== currentChecklistData.tag : false; + checklistBody = await GithubUtils.generateStagingDeployCashBody( newTag, _.pluck(PRList, 'url'), _.pluck(_.where(PRList, {isVerified: true}), 'url'), _.pluck(deployBlockers, 'url'), _.pluck(_.where(deployBlockers, {isResolved: true}), 'url'), - _.pluck(_.where(internalQAPRList, {isResolved: true}), 'url'), - didVersionChange ? false : currentStagingDeployCashData.isTimingDashboardChecked, - didVersionChange ? false : currentStagingDeployCashData.isFirebaseChecked, - didVersionChange ? false : currentStagingDeployCashData.isGHStatusChecked, + _.pluck(_.where(currentChecklistData.internalQAPRList, {isResolved: true}), 'url'), + didVersionChange ? false : currentChecklistData.isTimingDashboardChecked, + didVersionChange ? false : currentChecklistData.isFirebaseChecked, + didVersionChange ? false : currentChecklistData.isGHStatusChecked, ); - }) - .then((body) => { - const defaultPayload = { - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - body, - }; + } - if (shouldCreateNewStagingDeployCash) { - return GithubUtils.octokit.issues.create({ - ...defaultPayload, - title: `Deploy Checklist: New Expensify ${moment().format('YYYY-MM-DD')}`, - labels: [CONST.LABELS.STAGING_DEPLOY], - assignees: [CONST.APPLAUSE_BOT], - }); - } + // Finally, create or update the checklist + const defaultPayload = { + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + body: checklistBody, + }; - return GithubUtils.octokit.issues.update({ + if (shouldCreateNewDeployChecklist) { + const {data: newChecklist} = await GithubUtils.octokit.issues.create({ ...defaultPayload, - issue_number: currentStagingDeployCashData.number, + title: `Deploy Checklist: New Expensify ${moment().format('YYYY-MM-DD')}`, + labels: [CONST.LABELS.STAGING_DEPLOY], + assignees: [CONST.APPLAUSE_BOT], }); - }) - .then(({data}) => { - // eslint-disable-next-line max-len - console.log(`Successfully ${shouldCreateNewStagingDeployCash ? 'created new' : 'updated'} StagingDeployCash! 🎉 ${data.html_url}`); - return data; - }) - .catch((err) => { - console.error('An unknown error occurred!', err); - core.setFailed(err); + console.log(`Successfully created new StagingDeployCash! 🎉 ${newChecklist.html_url}`); + return newChecklist; + } + + const {data: updatedChecklist} = await GithubUtils.octokit.issues.update({ + ...defaultPayload, + issue_number: currentChecklistData.number, }); + console.log(`Successfully updated StagingDeployCash! 🎉 ${updatedChecklist.html_url}`); + return updatedChecklist; + } catch (err) { + console.error('An unknown error occurred!', err); + core.setFailed(err); + } }; if (require.main === require.cache[eval('__filename')]) { @@ -327,16 +287,17 @@ function getValidMergedPRs(commits) { * * @param {String} fromTag * @param {String} toTag - * @returns {Promise>} – Pull request numbers + * @returns {Promise>} – Pull request numbers */ function getPullRequestsMergedBetween(fromTag, toTag) { + console.log(`Looking for commits made between ${fromTag} and ${toTag}...`); return getCommitHistoryAsJSON(fromTag, toTag).then((commitList) => { console.log(`Commits made between ${fromTag} and ${toTag}:`, commitList); // Find which commit messages correspond to merged PR's const pullRequestNumbers = getValidMergedPRs(commitList); console.log(`List of pull requests merged between ${fromTag} and ${toTag}`, pullRequestNumbers); - return pullRequestNumbers; + return _.map(pullRequestNumbers, (prNum) => Number.parseInt(prNum, 10)); }); } diff --git a/.github/actions/javascript/getDeployPullRequestList/index.js b/.github/actions/javascript/getDeployPullRequestList/index.js index 01e8f166b397..e1c8dfdabcae 100644 --- a/.github/actions/javascript/getDeployPullRequestList/index.js +++ b/.github/actions/javascript/getDeployPullRequestList/index.js @@ -261,16 +261,17 @@ function getValidMergedPRs(commits) { * * @param {String} fromTag * @param {String} toTag - * @returns {Promise>} – Pull request numbers + * @returns {Promise>} – Pull request numbers */ function getPullRequestsMergedBetween(fromTag, toTag) { + console.log(`Looking for commits made between ${fromTag} and ${toTag}...`); return getCommitHistoryAsJSON(fromTag, toTag).then((commitList) => { console.log(`Commits made between ${fromTag} and ${toTag}:`, commitList); // Find which commit messages correspond to merged PR's const pullRequestNumbers = getValidMergedPRs(commitList); console.log(`List of pull requests merged between ${fromTag} and ${toTag}`, pullRequestNumbers); - return pullRequestNumbers; + return _.map(pullRequestNumbers, (prNum) => Number.parseInt(prNum, 10)); }); } diff --git a/.github/libs/GitUtils.js b/.github/libs/GitUtils.js index 979121bfbed7..b2f080df07b1 100644 --- a/.github/libs/GitUtils.js +++ b/.github/libs/GitUtils.js @@ -113,16 +113,17 @@ function getValidMergedPRs(commits) { * * @param {String} fromTag * @param {String} toTag - * @returns {Promise>} – Pull request numbers + * @returns {Promise>} – Pull request numbers */ function getPullRequestsMergedBetween(fromTag, toTag) { + console.log(`Looking for commits made between ${fromTag} and ${toTag}...`); return getCommitHistoryAsJSON(fromTag, toTag).then((commitList) => { console.log(`Commits made between ${fromTag} and ${toTag}:`, commitList); // Find which commit messages correspond to merged PR's const pullRequestNumbers = getValidMergedPRs(commitList); console.log(`List of pull requests merged between ${fromTag} and ${toTag}`, pullRequestNumbers); - return pullRequestNumbers; + return _.map(pullRequestNumbers, (prNum) => Number.parseInt(prNum, 10)); }); } diff --git a/tests/unit/createOrUpdateStagingDeployTest.js b/tests/unit/createOrUpdateStagingDeployTest.js index 679653fb2822..9e1b9f23af70 100644 --- a/tests/unit/createOrUpdateStagingDeployTest.js +++ b/tests/unit/createOrUpdateStagingDeployTest.js @@ -94,8 +94,6 @@ const basePRList = [ 'https://github.com/Expensify/App/pull/8', 'https://github.com/Expensify/App/pull/9', 'https://github.com/Expensify/App/pull/10', - 'https://github.com/Expensify/App/issues/11', - 'https://github.com/Expensify/App/issues/12', ]; const baseIssueList = ['https://github.com/Expensify/App/issues/11', 'https://github.com/Expensify/App/issues/12']; @@ -138,7 +136,7 @@ describe('createOrUpdateStagingDeployCash', () => { `${lineBreakDouble}${ccApplauseLeads}`, }; - const baseNewPullRequests = ['6', '7', '8']; + const baseNewPullRequests = [6, 7, 8]; test('creates new issue when there is none open', () => { mockGetInput.mockImplementation((arg) => { @@ -220,13 +218,13 @@ describe('createOrUpdateStagingDeployCash', () => { labels: [LABELS.DEPLOY_BLOCKER_CASH], }, { - html_url: 'https://github.com/Expensify/App/issues/9', + html_url: 'https://github.com/Expensify/App/pull/9', number: 9, state: 'open', labels: [LABELS.DEPLOY_BLOCKER_CASH], }, { - html_url: 'https://github.com/Expensify/App/issues/10', + html_url: 'https://github.com/Expensify/App/pull/10', number: 10, state: 'closed', labels: [LABELS.DEPLOY_BLOCKER_CASH], @@ -245,7 +243,7 @@ describe('createOrUpdateStagingDeployCash', () => { }); // New pull requests to add to open StagingDeployCash - const newPullRequests = ['9', '10']; + const newPullRequests = [9, 10]; mockGetPullRequestsMergedBetween.mockImplementation((fromRef, toRef) => { if (fromRef === '1.0.1-0' && toRef === '1.0.2-2') { return [...baseNewPullRequests, ...newPullRequests]; @@ -300,8 +298,8 @@ describe('createOrUpdateStagingDeployCash', () => { `${lineBreak}${openCheckbox}${basePRList[5]}` + `${lineBreak}${openCheckbox}${basePRList[8]}` + `${lineBreak}${closedCheckbox}${basePRList[9]}` + - `${lineBreak}${openCheckbox}${basePRList[10]}` + - `${lineBreak}${openCheckbox}${basePRList[11]}${lineBreak}` + + `${lineBreak}${openCheckbox}${baseIssueList[0]}` + + `${lineBreak}${openCheckbox}${baseIssueList[1]}${lineBreak}` + `${lineBreakDouble}${deployerVerificationsHeader}` + // Note: these will be unchecked with a new app version, and that's intentional `${lineBreak}${openCheckbox}${timingDashboardVerification}` + @@ -320,7 +318,7 @@ describe('createOrUpdateStagingDeployCash', () => { return 'fake_token'; }); mockGetPullRequestsMergedBetween.mockImplementation((fromRef, toRef) => { - if (fromRef === '1.0.1-0' && toRef === '1.0.2-2') { + if (fromRef === '1.0.1-0' && toRef === '1.0.2-1') { return [...baseNewPullRequests]; } return []; From 35bec3545c68248c1bf0f2718634eca9b6d2319c Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 30 Aug 2023 15:59:58 +0200 Subject: [PATCH 066/315] Run createOrUpdateStagingDeploy after platformDeploy completes --- .github/workflows/finishReleaseCycle.yml | 28 ----------------------- .github/workflows/platformDeploy.yml | 29 ++++++++++++++++++++++++ .github/workflows/preDeploy.yml | 19 ---------------- 3 files changed, 29 insertions(+), 47 deletions(-) diff --git a/.github/workflows/finishReleaseCycle.yml b/.github/workflows/finishReleaseCycle.yml index b78a5fac4b69..7b71f6263c88 100644 --- a/.github/workflows/finishReleaseCycle.yml +++ b/.github/workflows/finishReleaseCycle.yml @@ -119,31 +119,3 @@ jobs: uses: Expensify/App/.github/actions/composite/announceFailedWorkflowInSlack@main with: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} - - # Create a new StagingDeployCash for the next release cycle. - createNewStagingDeployCash: - runs-on: ubuntu-latest - needs: [updateStaging, createNewPatchVersion] - steps: - - uses: actions/checkout@v3 - with: - ref: staging - token: ${{ secrets.OS_BOTIFY_TOKEN }} - - # Create a local git tag so that GitUtils.getPullRequestsMergedBetween can use `git log` to generate a - # list of pull requests that were merged between this version tag and another. - # NOTE: This tag is only used locally and shouldn't be pushed to the remote. - # If it was pushed, that would trigger the staging deploy which is handled in a separate workflow (deploy.yml) - - name: Tag version - run: git tag ${{ needs.createNewPatchVersion.outputs.NEW_VERSION }} - - - name: Create new StagingDeployCash - uses: Expensify/App/.github/actions/javascript/createOrUpdateStagingDeploy@main - with: - GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }} - NPM_VERSION: ${{ needs.createNewPatchVersion.outputs.NEW_VERSION }} - - - if: ${{ failure() }} - uses: Expensify/App/.github/actions/composite/announceFailedWorkflowInSlack@main - with: - SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} diff --git a/.github/workflows/platformDeploy.yml b/.github/workflows/platformDeploy.yml index 84f8373ff247..b50a14dc9ca1 100644 --- a/.github/workflows/platformDeploy.yml +++ b/.github/workflows/platformDeploy.yml @@ -387,3 +387,32 @@ jobs: DESKTOP: ${{ needs.desktop.result }} IOS: ${{ needs.iOS.result }} WEB: ${{ needs.web.result }} + + deployChecklist: + name: Create or update deploy checklist + runs-on: ubuntu-latest + if: ${{ always() }} + needs: [android, desktop, iOS, web] + steps: + - name: Quit early if all platforms failed + run: | + if [[ ${{ needs.android.result }} != 'success' && \ + ${{ needs.desktop.result }} != 'success' && \ + ${{ needs.iOS.result }} != 'success' && \ + ${{ needs.web.result }} != 'success' ]]; then + echo 'Deploy failed on all platforms, not updating the checklist...' + exit 1 + fi + + - uses: actions/checkout@v3 + + - uses: Expensify/App/.github/actions/composite/setupNode@main + + - name: Set version + run: echo "VERSION=$(npm run print-version --silent)" >> "$GITHUB_ENV" + + - name: Create or update staging deploy + uses: Expensify/App/.github/actions/javascript/createOrUpdateStagingDeploy@main + with: + GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }} + NPM_VERSION: ${{ needs.createNewVersion.outputs.NEW_VERSION }} diff --git a/.github/workflows/preDeploy.yml b/.github/workflows/preDeploy.yml index c9fb636238aa..e3977734fc50 100644 --- a/.github/workflows/preDeploy.yml +++ b/.github/workflows/preDeploy.yml @@ -98,25 +98,6 @@ jobs: # Force-update the remote staging branch git push --force origin staging - # Create a local git tag on staging so that GitUtils.getPullRequestsMergedBetween can use `git log` to generate a - # list of pull requests that were merged between this version tag and another. - # NOTE: This tag is only used locally and shouldn't be pushed to the remote. - # If it was pushed, that would trigger the staging deploy which is handled in a separate workflow (deploy.yml) - - name: Tag staging - run: git tag ${{ needs.createNewVersion.outputs.NEW_VERSION }} - - - name: Update StagingDeployCash - uses: Expensify/App/.github/actions/javascript/createOrUpdateStagingDeploy@main - with: - GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }} - NPM_VERSION: ${{ needs.createNewVersion.outputs.NEW_VERSION }} - - - name: Find open StagingDeployCash - id: getStagingDeployCash - run: echo "STAGING_DEPLOY_CASH=$(gh issue list --label StagingDeployCash --json number --jq '.[0].number')" >> "$GITHUB_OUTPUT" - env: - GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }} - - if: ${{ failure() }} uses: Expensify/App/.github/actions/composite/announceFailedWorkflowInSlack@main with: From f6a6383de6c082c6f1f1221823af898a9dd8c22a Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 30 Aug 2023 16:11:23 +0200 Subject: [PATCH 067/315] getPullRequestsBetween now returns an array of numbers --- .../getReleaseBody/getReleaseBody.js | 2 +- .../markPullRequestsAsDeployed.js | 1 - .github/libs/GitUtils.js | 5 +--- tests/unit/CIGitLogicTest.sh | 26 +++++++++---------- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/.github/actions/javascript/getReleaseBody/getReleaseBody.js b/.github/actions/javascript/getReleaseBody/getReleaseBody.js index d0b1b4af34c5..fc5df102506f 100644 --- a/.github/actions/javascript/getReleaseBody/getReleaseBody.js +++ b/.github/actions/javascript/getReleaseBody/getReleaseBody.js @@ -4,7 +4,7 @@ const ActionUtils = require('../../../libs/ActionUtils'); const GithubUtils = require('../../../libs/GithubUtils'); // Parse the stringified JSON array of PR numbers, and cast each from String -> Number -const PRList = _.map(ActionUtils.getJSONInput('PR_LIST', {required: true}), Number); +const PRList = ActionUtils.getJSONInput('PR_LIST', {required: true}); console.log(`Got PR list: ${PRList}`); const releaseBody = GithubUtils.getReleaseBody(PRList); diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js index 865379ac83fb..f1339ffe78f4 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js @@ -1,5 +1,4 @@ const _ = require('underscore'); -const lodashGet = require('lodash/get'); const core = require('@actions/core'); const {context} = require('@actions/github'); const CONST = require('../../../libs/CONST'); diff --git a/.github/libs/GitUtils.js b/.github/libs/GitUtils.js index b2f080df07b1..282e60c03143 100644 --- a/.github/libs/GitUtils.js +++ b/.github/libs/GitUtils.js @@ -22,10 +22,7 @@ function fetchTag(tag) { console.log(`Running command: ${command}`); execSync(command); } catch (e) { - // This can happen if the tag was only created locally but does not exist in the remote. In this case, we'll fetch history of the staging branch instead - const command = `git fetch origin staging --no-tags --shallow-exclude=${previousPatchVersion}`; - console.log(`Running command: ${command}`); - execSync(command); + console.error(e); } } diff --git a/tests/unit/CIGitLogicTest.sh b/tests/unit/CIGitLogicTest.sh index d79fa7a22c0c..6a045bcb13e0 100755 --- a/tests/unit/CIGitLogicTest.sh +++ b/tests/unit/CIGitLogicTest.sh @@ -212,7 +212,7 @@ tag_staging git switch main # Verify output for checklist and deploy comment -assert_prs_merged_between '1.0.0-0' '1.0.0-1' "[ '1' ]" +assert_prs_merged_between '1.0.0-0' '1.0.0-1' "[ 1 ]" success "Scenario #1 completed successfully!" @@ -241,10 +241,10 @@ cherry_pick_pr 3 tag_staging # Verify output for checklist -assert_prs_merged_between '1.0.0-0' '1.0.0-2' "[ '3', '1' ]" +assert_prs_merged_between '1.0.0-0' '1.0.0-2' "[ 3, 1 ]" # Verify output for deploy comment -assert_prs_merged_between '1.0.0-1' '1.0.0-2' "[ '3' ]" +assert_prs_merged_between '1.0.0-1' '1.0.0-2' "[ 3 ]" success "Scenario #3 completed successfully!" @@ -255,7 +255,7 @@ title "Scenario #4A: Run the production deploy" update_production_from_staging # Verify output for release body and production deploy comments -assert_prs_merged_between '1.0.0-0' '1.0.0-2' "[ '3', '1' ]" +assert_prs_merged_between '1.0.0-0' '1.0.0-2' "[ 3, 1 ]" success "Scenario #4A completed successfully!" @@ -266,7 +266,7 @@ update_staging_from_main tag_staging # Verify output for new checklist and staging deploy comments -assert_prs_merged_between '1.0.0-2' '1.0.1-0' "[ '2' ]" +assert_prs_merged_between '1.0.0-2' '1.0.1-0' "[ 2 ]" success "Scenario #4B completed successfully!" @@ -287,10 +287,10 @@ update_staging_from_main tag_staging # Verify output for checklist -assert_prs_merged_between '1.0.0-2' '1.0.1-1' "[ '5', '2' ]" +assert_prs_merged_between '1.0.0-2' '1.0.1-1' "[ 5, 2 ]" # Verify output for deploy comment -assert_prs_merged_between '1.0.1-0' '1.0.1-1' "[ '5' ]" +assert_prs_merged_between '1.0.1-0' '1.0.1-1' "[ 5 ]" success "Scenario #5 completed successfully!" @@ -310,10 +310,10 @@ update_staging_from_main tag_staging # Verify output for checklist -assert_prs_merged_between '1.0.0-2' '1.0.1-2' "[ '6', '5', '2' ]" +assert_prs_merged_between '1.0.0-2' '1.0.1-2' "[ 6, 5, 2 ]" # Verify output for deploy comment -assert_prs_merged_between '1.0.1-1' '1.0.1-2' "[ '6' ]" +assert_prs_merged_between '1.0.1-1' '1.0.1-2' "[ 6 ]" info "Appending and prepending content to myFile.txt in PR #7" setup_git_as_human @@ -332,10 +332,10 @@ update_staging_from_main tag_staging # Verify output for checklist -assert_prs_merged_between '1.0.0-2' '1.0.1-3' "[ '7', '6', '5', '2' ]" +assert_prs_merged_between '1.0.0-2' '1.0.1-3' "[ 7, 6, 5, 2 ]" # Verify output for deploy comment -assert_prs_merged_between '1.0.1-2' '1.0.1-3' "[ '7' ]" +assert_prs_merged_between '1.0.1-2' '1.0.1-3' "[ 7 ]" info "Making an unrelated change in PR #8" setup_git_as_human @@ -392,10 +392,10 @@ update_staging_from_main tag_staging # Verify production release list -assert_prs_merged_between '1.0.0-2' '1.0.1-4' "[ '9', '7', '6', '5', '2' ]" +assert_prs_merged_between '1.0.0-2' '1.0.1-4' "[ 9, 7, 6, 5, 2 ]" # Verify PR list for the new checklist -assert_prs_merged_between '1.0.1-4' '1.0.2-0' "[ '10', '8' ]" +assert_prs_merged_between '1.0.1-4' '1.0.2-0' "[ 10, 8 ]" ### Cleanup title "Cleaning up..." From 2bceea3987fe94a90d6b0e21a8ed3486bb80bd9b Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 30 Aug 2023 16:18:03 +0200 Subject: [PATCH 068/315] Rebuild GH actions --- .../javascript/createOrUpdateStagingDeploy/index.js | 5 +---- .../actions/javascript/getDeployPullRequestList/index.js | 5 +---- .github/actions/javascript/getReleaseBody/index.js | 2 +- .../javascript/markPullRequestsAsDeployed/index.js | 9 ++++----- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js index 2313925146d1..914711264d4c 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js @@ -196,10 +196,7 @@ function fetchTag(tag) { console.log(`Running command: ${command}`); execSync(command); } catch (e) { - // This can happen if the tag was only created locally but does not exist in the remote. In this case, we'll fetch history of the staging branch instead - const command = `git fetch origin staging --no-tags --shallow-exclude=${previousPatchVersion}`; - console.log(`Running command: ${command}`); - execSync(command); + console.error(e); } } diff --git a/.github/actions/javascript/getDeployPullRequestList/index.js b/.github/actions/javascript/getDeployPullRequestList/index.js index e1c8dfdabcae..f1dc0c7b8dad 100644 --- a/.github/actions/javascript/getDeployPullRequestList/index.js +++ b/.github/actions/javascript/getDeployPullRequestList/index.js @@ -170,10 +170,7 @@ function fetchTag(tag) { console.log(`Running command: ${command}`); execSync(command); } catch (e) { - // This can happen if the tag was only created locally but does not exist in the remote. In this case, we'll fetch history of the staging branch instead - const command = `git fetch origin staging --no-tags --shallow-exclude=${previousPatchVersion}`; - console.log(`Running command: ${command}`); - execSync(command); + console.error(e); } } diff --git a/.github/actions/javascript/getReleaseBody/index.js b/.github/actions/javascript/getReleaseBody/index.js index c1cb5c473912..c2ed605a462a 100644 --- a/.github/actions/javascript/getReleaseBody/index.js +++ b/.github/actions/javascript/getReleaseBody/index.js @@ -14,7 +14,7 @@ const ActionUtils = __nccwpck_require__(970); const GithubUtils = __nccwpck_require__(7999); // Parse the stringified JSON array of PR numbers, and cast each from String -> Number -const PRList = _.map(ActionUtils.getJSONInput('PR_LIST', {required: true}), Number); +const PRList = ActionUtils.getJSONInput('PR_LIST', {required: true}); console.log(`Got PR list: ${PRList}`); const releaseBody = GithubUtils.getReleaseBody(PRList); diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/index.js b/.github/actions/javascript/markPullRequestsAsDeployed/index.js index 1b353abcb054..bd71eeb51894 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/index.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/index.js @@ -9,7 +9,6 @@ module.exports = /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { const _ = __nccwpck_require__(2947); -const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {context} = __nccwpck_require__(5438); const CONST = __nccwpck_require__(4097); @@ -8162,7 +8161,7 @@ var modules = [ __nccwpck_require__(9557), __nccwpck_require__(1155), __nccwpck_require__(1644), - __nccwpck_require__(373), + __nccwpck_require__(6657), __nccwpck_require__(1080), __nccwpck_require__(1012), __nccwpck_require__(9695), @@ -8386,7 +8385,7 @@ InternalDecoderCesu8.prototype.end = function() { /***/ }), -/***/ 373: +/***/ 6657: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -10446,7 +10445,7 @@ module.exports = Map; /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var mapCacheClear = __nccwpck_require__(1610), - mapCacheDelete = __nccwpck_require__(6657), + mapCacheDelete = __nccwpck_require__(5991), mapCacheGet = __nccwpck_require__(1372), mapCacheHas = __nccwpck_require__(609), mapCacheSet = __nccwpck_require__(5582); @@ -11288,7 +11287,7 @@ module.exports = mapCacheClear; /***/ }), -/***/ 6657: +/***/ 5991: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var getMapData = __nccwpck_require__(9980); From eba1a8c9aa8e4bb7aa73329592d64becc48fcbc1 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 17:45:54 +0300 Subject: [PATCH 069/315] Moved method to StyleUtils for future use. --- .../ReportActionItem/MoneyRequestPreview.js | 20 +------------ src/styles/StyleUtils.js | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js index 9df3ccb06428..fa16f0761bc8 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview.js +++ b/src/components/ReportActionItem/MoneyRequestPreview.js @@ -164,22 +164,6 @@ function MoneyRequestPreview(props) { description = props.transaction.merchant; } - // Prevents large amounts from being cut off on small screen widths. - const getFontSizeAndLineHeightToSubtract = () => { - let toSubtract = 0; - if (isSmallScreenWidth) { - const widthDifference = variables.mobileResponsiveWidthBreakpoint - windowWidth; - if (widthDifference > 450) toSubtract = 9; - else if (widthDifference > 400) toSubtract = 6; - else if (widthDifference > 350) toSubtract = 2; - } - - // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. - if (requestAmount >= 100000000) toSubtract += 2; - - return toSubtract; - }; - const getSettledMessage = () => { switch (lodashGet(props.action, 'originalMessage.paymentType', '')) { case CONST.IOU.PAYMENT_TYPE.PAYPAL_ME: @@ -277,10 +261,8 @@ function MoneyRequestPreview(props) { {getDisplayAmountText()} diff --git a/src/styles/StyleUtils.js b/src/styles/StyleUtils.js index 9dcf954e84fd..6b232f54257e 100644 --- a/src/styles/StyleUtils.js +++ b/src/styles/StyleUtils.js @@ -1329,6 +1329,35 @@ function getDropDownButtonHeight(buttonSize) { }; } +/** + * Returns fitting fontSize and lineHeight values in order to prevent large amounts from being cut off on small screen widths. + * + * @param {Number} baseFontSize + * @param {Number} baseLineHeight + * @param {Boolean} isSmallScreenWidth + * @param {Number} windowWidth + * @param {Number} requestAmount + * @returns {Object} + */ +function getAmountFontSizeAndLineHeight(baseFontSize, baseLineHeight, isSmallScreenWidth, windowWidth, requestAmount) { + let toSubtract = 0; + + if (isSmallScreenWidth) { + const widthDifference = variables.mobileResponsiveWidthBreakpoint - windowWidth; + if (widthDifference > 350) toSubtract = 2; + if (widthDifference > 400) toSubtract = 6; + if (widthDifference > 450) toSubtract = 9; + } + + // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. + if (requestAmount >= 100000000) toSubtract += 2; + + return { + fontSize: baseFontSize - toSubtract, + lineHeight: baseLineHeight - toSubtract, + }; +}; + export { getAvatarSize, getAvatarWidthStyle, @@ -1404,4 +1433,5 @@ export { getDisabledLinkStyles, getCheckboxContainerStyle, getDropDownButtonHeight, + getAmountFontSizeAndLineHeight }; From ff2551d101a6e824e760ecbd0e102c043a6d6dad Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 17:54:52 +0300 Subject: [PATCH 070/315] Run prettier. --- src/styles/StyleUtils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/styles/StyleUtils.js b/src/styles/StyleUtils.js index 6b232f54257e..15d1128a4a90 100644 --- a/src/styles/StyleUtils.js +++ b/src/styles/StyleUtils.js @@ -1356,7 +1356,7 @@ function getAmountFontSizeAndLineHeight(baseFontSize, baseLineHeight, isSmallScr fontSize: baseFontSize - toSubtract, lineHeight: baseLineHeight - toSubtract, }; -}; +} export { getAvatarSize, @@ -1433,5 +1433,5 @@ export { getDisabledLinkStyles, getCheckboxContainerStyle, getDropDownButtonHeight, - getAmountFontSizeAndLineHeight + getAmountFontSizeAndLineHeight, }; From c2f3097941439015ebca802c3939ee7b44077a4f Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 30 Aug 2023 16:57:53 +0200 Subject: [PATCH 071/315] add onyxupdatemanager on tests --- tests/actions/IOUTest.js | 2 ++ tests/actions/ReportTest.js | 2 ++ tests/actions/SessionTest.js | 2 ++ 3 files changed, 6 insertions(+) diff --git a/tests/actions/IOUTest.js b/tests/actions/IOUTest.js index 6fbbe19cec8e..afb06cdb6fb3 100644 --- a/tests/actions/IOUTest.js +++ b/tests/actions/IOUTest.js @@ -9,6 +9,7 @@ import DateUtils from '../../src/libs/DateUtils'; import * as NumberUtils from '../../src/libs/NumberUtils'; import * as ReportActions from '../../src/libs/actions/ReportActions'; import * as Report from '../../src/libs/actions/Report'; +import OnyxUpdateManager from '../../src/libs/actions/OnyxUpdateManager'; const CARLOS_EMAIL = 'cmartins@expensifail.com'; const CARLOS_ACCOUNT_ID = 1; @@ -19,6 +20,7 @@ const RORY_ACCOUNT_ID = 3; const VIT_EMAIL = 'vit@expensifail.com'; const VIT_ACCOUNT_ID = 4; +OnyxUpdateManager(); describe('actions/IOU', () => { beforeAll(() => { Onyx.init({ diff --git a/tests/actions/ReportTest.js b/tests/actions/ReportTest.js index c06d3bc83766..978186fcf9c4 100644 --- a/tests/actions/ReportTest.js +++ b/tests/actions/ReportTest.js @@ -14,6 +14,7 @@ import * as PersistedRequests from '../../src/libs/actions/PersistedRequests'; import * as User from '../../src/libs/actions/User'; import * as ReportUtils from '../../src/libs/ReportUtils'; import DateUtils from '../../src/libs/DateUtils'; +import OnyxUpdateManager from '../../src/libs/actions/OnyxUpdateManager'; jest.mock('../../src/libs/actions/Report', () => { const originalModule = jest.requireActual('../../src/libs/actions/Report'); @@ -24,6 +25,7 @@ jest.mock('../../src/libs/actions/Report', () => { }; }); +OnyxUpdateManager(); describe('actions/Report', () => { beforeAll(() => { PusherHelper.setup(); diff --git a/tests/actions/SessionTest.js b/tests/actions/SessionTest.js index d8bfa144e358..59a7441679ea 100644 --- a/tests/actions/SessionTest.js +++ b/tests/actions/SessionTest.js @@ -7,6 +7,7 @@ import * as TestHelper from '../utils/TestHelper'; import CONST from '../../src/CONST'; import PushNotification from '../../src/libs/Notification/PushNotification'; import * as App from '../../src/libs/actions/App'; +import OnyxUpdateManager from '../../src/libs/actions/OnyxUpdateManager'; // This lib needs to be imported, but it has nothing to export since all it contains is an Onyx connection // eslint-disable-next-line no-unused-vars @@ -24,6 +25,7 @@ Onyx.init({ registerStorageEventListener: () => {}, }); +OnyxUpdateManager(); beforeEach(() => Onyx.clear().then(waitForPromisesToResolve)); describe('Session', () => { From 57874c757bc92154e4147ddfb5ad4d4ad196ad91 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 30 Aug 2023 17:00:07 +0200 Subject: [PATCH 072/315] adding additional checks for early return --- src/libs/Middleware/SaveResponseInOnyx.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index 13244dd64e36..448574af8101 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -28,9 +28,9 @@ function SaveResponseInOnyx(response, request) { // Supports both the old format and the new format const onyxUpdates = _.isArray(responseData) ? responseData : responseData.onyxData; - // Sometimes we call requests that are successfull but they don't have any response. Let's return early since + // Sometimes we call requests that are successfull but they don't have any response or any success/failure data to set. Let's return early since // we don't need to store anything here. - if (!onyxUpdates) { + if (!onyxUpdates && !request.successData && !request.failureData) { return; } From 0a959387b3b0ff3d78c7196dcfc3dae487de24a1 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 18:17:52 +0300 Subject: [PATCH 073/315] Make sure the amount can not overlap the avatar icons. --- src/components/ReportActionItem/MoneyRequestPreview.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js index fa16f0761bc8..be46d082b799 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview.js +++ b/src/components/ReportActionItem/MoneyRequestPreview.js @@ -263,6 +263,7 @@ function MoneyRequestPreview(props) { styles.moneyRequestPreviewAmount, StyleUtils.getAmountFontSizeAndLineHeight(variables.fontSizeXLarge, variables.lineHeightXXLarge, isSmallScreenWidth, windowWidth, requestAmount), ]} + numberOfLines={1} > {getDisplayAmountText()} From a0134062d25ed1e8797b8ac2035fabcced97d938 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 19:04:50 +0300 Subject: [PATCH 074/315] Replaced if conditions with a range switch. --- src/styles/StyleUtils.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/styles/StyleUtils.js b/src/styles/StyleUtils.js index 15d1128a4a90..88aa72c89843 100644 --- a/src/styles/StyleUtils.js +++ b/src/styles/StyleUtils.js @@ -1344,9 +1344,17 @@ function getAmountFontSizeAndLineHeight(baseFontSize, baseLineHeight, isSmallScr if (isSmallScreenWidth) { const widthDifference = variables.mobileResponsiveWidthBreakpoint - windowWidth; - if (widthDifference > 350) toSubtract = 2; - if (widthDifference > 400) toSubtract = 6; - if (widthDifference > 450) toSubtract = 9; + switch (true) { + case widthDifference > 450: + toSubtract = 9; + break; + case widthDifference > 400: + toSubtract = 6; + break; + case widthDifference > 350: + toSubtract = 2; + break; + } } // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. From c87eb0816ad103473301806ed90b284a1bf480f3 Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 19:07:57 +0300 Subject: [PATCH 075/315] Moved condition higer in order to make it more clear. --- src/styles/StyleUtils.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/styles/StyleUtils.js b/src/styles/StyleUtils.js index 88aa72c89843..4d724c256419 100644 --- a/src/styles/StyleUtils.js +++ b/src/styles/StyleUtils.js @@ -1342,24 +1342,24 @@ function getDropDownButtonHeight(buttonSize) { function getAmountFontSizeAndLineHeight(baseFontSize, baseLineHeight, isSmallScreenWidth, windowWidth, requestAmount) { let toSubtract = 0; + // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. + if (requestAmount >= 100000000) toSubtract = 2; + if (isSmallScreenWidth) { const widthDifference = variables.mobileResponsiveWidthBreakpoint - windowWidth; switch (true) { case widthDifference > 450: - toSubtract = 9; + toSubtract += 9; break; case widthDifference > 400: - toSubtract = 6; + toSubtract += 6; break; case widthDifference > 350: - toSubtract = 2; + toSubtract += 2; break; } } - // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. - if (requestAmount >= 100000000) toSubtract += 2; - return { fontSize: baseFontSize - toSubtract, lineHeight: baseLineHeight - toSubtract, From c56712a85aec5ea60756bc911068174b26efcd9a Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Wed, 30 Aug 2023 19:20:54 +0300 Subject: [PATCH 076/315] Fix lint error. --- src/styles/StyleUtils.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/styles/StyleUtils.js b/src/styles/StyleUtils.js index 4d724c256419..3cd1af8fef16 100644 --- a/src/styles/StyleUtils.js +++ b/src/styles/StyleUtils.js @@ -1357,6 +1357,8 @@ function getAmountFontSizeAndLineHeight(baseFontSize, baseLineHeight, isSmallScr case widthDifference > 350: toSubtract += 2; break; + default: + break; } } From 4cf1934c1d00cd2fc2032f517f4b31ec8ff2df9b Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 30 Aug 2023 19:18:58 +0200 Subject: [PATCH 077/315] adding onyx update manager to Network tests --- tests/unit/NetworkTest.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/unit/NetworkTest.js b/tests/unit/NetworkTest.js index c8dcda0e2af5..0b577dc82469 100644 --- a/tests/unit/NetworkTest.js +++ b/tests/unit/NetworkTest.js @@ -14,6 +14,7 @@ import Log from '../../src/libs/Log'; import * as MainQueue from '../../src/libs/Network/MainQueue'; import * as App from '../../src/libs/actions/App'; import NetworkConnection from '../../src/libs/NetworkConnection'; +import OnyxUpdateManager from '../../src/libs/actions/OnyxUpdateManager'; jest.mock('../../src/libs/Log'); jest.useFakeTimers(); @@ -21,7 +22,7 @@ jest.useFakeTimers(); Onyx.init({ keys: ONYXKEYS, }); - +OnyxUpdateManager(); const originalXHR = HttpUtils.xhr; beforeEach(() => { From 64e006c0cf7c4f7eff875111ed518bb3fc033429 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 30 Aug 2023 19:21:31 +0200 Subject: [PATCH 078/315] adding space for style --- tests/unit/NetworkTest.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/NetworkTest.js b/tests/unit/NetworkTest.js index 0b577dc82469..7d8c4f23197c 100644 --- a/tests/unit/NetworkTest.js +++ b/tests/unit/NetworkTest.js @@ -22,6 +22,7 @@ jest.useFakeTimers(); Onyx.init({ keys: ONYXKEYS, }); + OnyxUpdateManager(); const originalXHR = HttpUtils.xhr; From 62010fc87dd4c2b9ca45e0616e8d9a3124487aaf Mon Sep 17 00:00:00 2001 From: Huzaifa Rasheed Date: Thu, 31 Aug 2023 01:23:29 +0500 Subject: [PATCH 079/315] Show header in profile pages when personal details are loading --- .../Profile/PersonalDetails/AddressPage.js | 161 +++++++++--------- .../PersonalDetails/DateOfBirthPage.js | 41 ++--- .../Profile/PersonalDetails/LegalNamePage.js | 75 ++++---- .../PersonalDetailsInitialPage.js | 59 +++---- 4 files changed, 170 insertions(+), 166 deletions(-) diff --git a/src/pages/settings/Profile/PersonalDetails/AddressPage.js b/src/pages/settings/Profile/PersonalDetails/AddressPage.js index 814d47e003b7..7206f786e44e 100644 --- a/src/pages/settings/Profile/PersonalDetails/AddressPage.js +++ b/src/pages/settings/Profile/PersonalDetails/AddressPage.js @@ -72,6 +72,7 @@ function AddressPage({privatePersonalDetails, country}) { const zipFormat = translate('common.zipCodeExampleFormat', {zipSampleFormat}); const address = lodashGet(privatePersonalDetails, 'address') || {}; + const isLoadingPersonalDetails = lodashGet(privatePersonalDetails, 'isLoading', true); const [street1, street2] = (address.street || '').split('\n'); const [state, setState] = useState(address.state); /** @@ -131,10 +132,6 @@ function AddressPage({privatePersonalDetails, country}) { setState(value); }; - if (lodashGet(privatePersonalDetails, 'isLoading', true)) { - return ; - } - return ( Navigation.goBack(ROUTES.SETTINGS_PERSONAL_DETAILS)} /> -
- - - - - - - - + ) : ( + + + + + + - - - {isUSAForm ? ( + - - ) : ( + + {isUSAForm ? ( + + + + ) : ( + + )} + - )} - - - - - + + + + )}
); } diff --git a/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.js b/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.js index 90c469c4e25d..22346a48658d 100644 --- a/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.js +++ b/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.js @@ -38,6 +38,7 @@ const defaultProps = { function DateOfBirthPage({translate, privatePersonalDetails}) { usePrivatePersonalDetails(); + const isLoadingPersonalDetails = lodashGet(privatePersonalDetails, 'isLoading', true); /** * @param {Object} values @@ -59,32 +60,32 @@ function DateOfBirthPage({translate, privatePersonalDetails}) { return errors; }, []); - if (lodashGet(privatePersonalDetails, 'isLoading', true)) { - return ; - } - return ( Navigation.goBack(ROUTES.SETTINGS_PERSONAL_DETAILS)} /> -
- - + {isLoadingPersonalDetails ? ( + + ) : ( +
+ + + )}
); } diff --git a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.js b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.js index 031816247317..0caf20a3e128 100644 --- a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.js +++ b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.js @@ -47,6 +47,7 @@ function LegalNamePage(props) { usePrivatePersonalDetails(); const legalFirstName = lodashGet(props.privatePersonalDetails, 'legalFirstName', ''); const legalLastName = lodashGet(props.privatePersonalDetails, 'legalLastName', ''); + const isLoadingPersonalDetails = lodashGet(props.privatePersonalDetails, 'isLoading', true); const validate = useCallback((values) => { const errors = {}; @@ -66,10 +67,6 @@ function LegalNamePage(props) { return errors; }, []); - if (lodashGet(props.privatePersonalDetails, 'isLoading', true)) { - return ; - } - return ( Navigation.goBack(ROUTES.SETTINGS_PERSONAL_DETAILS)} /> -
- - - - - - -
+ {isLoadingPersonalDetails ? ( + + ) : ( +
+ + + + + + +
+ )}
); } diff --git a/src/pages/settings/Profile/PersonalDetails/PersonalDetailsInitialPage.js b/src/pages/settings/Profile/PersonalDetails/PersonalDetailsInitialPage.js index e22aeca6a3d8..e1c4f14047a2 100644 --- a/src/pages/settings/Profile/PersonalDetails/PersonalDetailsInitialPage.js +++ b/src/pages/settings/Profile/PersonalDetails/PersonalDetailsInitialPage.js @@ -60,6 +60,7 @@ function PersonalDetailsInitialPage(props) { const privateDetails = props.privatePersonalDetails || {}; const address = privateDetails.address || {}; const legalName = `${privateDetails.legalFirstName || ''} ${privateDetails.legalLastName || ''}`.trim(); + const isLoadingPersonalDetails = lodashGet(props.privatePersonalDetails, 'isLoading', true); /** * Applies common formatting to each piece of an address @@ -83,42 +84,42 @@ function PersonalDetailsInitialPage(props) { return formattedAddress.trim().replace(/,$/, ''); }; - if (lodashGet(props.privatePersonalDetails, 'isLoading', true)) { - return ; - } - return ( Navigation.goBack(ROUTES.SETTINGS_PROFILE)} /> - - - - {props.translate('privatePersonalDetails.privateDataMessage')} + {isLoadingPersonalDetails ? ( + + ) : ( + + + + {props.translate('privatePersonalDetails.privateDataMessage')} + + Navigation.navigate(ROUTES.SETTINGS_PERSONAL_DETAILS_LEGAL_NAME)} + /> + Navigation.navigate(ROUTES.SETTINGS_PERSONAL_DETAILS_DATE_OF_BIRTH)} + titleStyle={[styles.flex1]} + /> + Navigation.navigate(ROUTES.SETTINGS_PERSONAL_DETAILS_ADDRESS)} + /> - Navigation.navigate(ROUTES.SETTINGS_PERSONAL_DETAILS_LEGAL_NAME)} - /> - Navigation.navigate(ROUTES.SETTINGS_PERSONAL_DETAILS_DATE_OF_BIRTH)} - titleStyle={[styles.flex1]} - /> - Navigation.navigate(ROUTES.SETTINGS_PERSONAL_DETAILS_ADDRESS)} - /> - - + + )} ); } From 6ca99584ec8dd0df568570272dcc22df753735c5 Mon Sep 17 00:00:00 2001 From: DylanDylann Date: Thu, 31 Aug 2023 09:41:02 +0700 Subject: [PATCH 080/315] fix incorrect when inviting existing member --- src/pages/workspace/WorkspaceInvitePage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/WorkspaceInvitePage.js b/src/pages/workspace/WorkspaceInvitePage.js index 6db3a20a3e4a..b7a1986c06e6 100644 --- a/src/pages/workspace/WorkspaceInvitePage.js +++ b/src/pages/workspace/WorkspaceInvitePage.js @@ -186,7 +186,7 @@ function WorkspaceInvitePage(props) { ); const headerMessage = useMemo(() => { - const searchValue = searchTerm.trim(); + const searchValue = searchTerm.trim().toLowerCase(); if (!userToInvite && CONST.EXPENSIFY_EMAILS.includes(searchValue)) { return translate('messages.errorMessageInvalidEmail'); } From a36465df9e49d7d6f9e88384b21b3882bdf7b11a Mon Sep 17 00:00:00 2001 From: Prince Mendiratta Date: Thu, 31 Aug 2023 16:17:12 +0530 Subject: [PATCH 081/315] feat: update android notif icons Signed-off-by: Prince Mendiratta --- .../assets/airshipconfig.properties | 2 +- .../src/main/assets/airshipconfig.properties | 2 +- .../res/drawable-hdpi/ic_notification.png | Bin 693 -> 1020 bytes .../res/drawable-mdpi/ic_notification.png | Bin 487 -> 707 bytes .../res/drawable-xhdpi/ic_notification.png | Bin 977 -> 1362 bytes .../res/drawable-xxhdpi/ic_notification.png | Bin 1397 -> 1814 bytes .../res/drawable-xxxhdpi/ic_notification.png | Bin 1815 -> 2393 bytes 7 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/src/development/assets/airshipconfig.properties b/android/app/src/development/assets/airshipconfig.properties index 490f74552f11..43907fcbf251 100644 --- a/android/app/src/development/assets/airshipconfig.properties +++ b/android/app/src/development/assets/airshipconfig.properties @@ -5,4 +5,4 @@ developmentLogLevel = VERBOSE # Notification Customization notificationIcon = ic_notification -notificationAccentColor = #2EAAE2 \ No newline at end of file +notificationAccentColor = #03D47C \ No newline at end of file diff --git a/android/app/src/main/assets/airshipconfig.properties b/android/app/src/main/assets/airshipconfig.properties index 194c4577de8b..e15533fdda4d 100644 --- a/android/app/src/main/assets/airshipconfig.properties +++ b/android/app/src/main/assets/airshipconfig.properties @@ -4,4 +4,4 @@ inProduction = true # Notification Customization notificationIcon = ic_notification -notificationAccentColor = #2EAAE2 \ No newline at end of file +notificationAccentColor = #03D47C \ No newline at end of file diff --git a/android/app/src/main/res/drawable-hdpi/ic_notification.png b/android/app/src/main/res/drawable-hdpi/ic_notification.png index 7612112d1bc5ce2d5a6b9ea9e5eed6bd287524f3..5a36b56c4bc92d00258ffeb55ee50712bb402498 100644 GIT binary patch delta 949 zcmV;m14{h01^fq)ReuAKNklxz-~gcijB$Kz;FU_>B?{d zVC6FA1j5o4a01{2j3;n_4VD7q4mKuBODog9*FArb%w&clqhD2^XS&nx%X{7Lecb|O z;jGvQey>4@HlR9CsMFhe*gJ%P4+tLtj$l1<;hp;>W~Z+g#ed6Y7ZUHFh(sw1!X z%rUiAQg3%4gMYX1u3TIXf1wPn2Oe$)J6M<#^n+|Y*UiAq8ZPdT;V^wcv|czoLaf8P zI7CIL-Fh->#!kpstMI;gm<2cz%KAv*^eBY==yl>D-qu3x#?Ml`nW<;m%>yE{W^76N z;on_uCLR*1mm1!mNail-B2X0aNn2g16Z&finY7Z-+<#(2NvM2s;RnnbGS~(X?N&SF z5E9}H96^Xas(?uyiLH=B&200q9I$u1VktgGRJ*bu^ZF>KnT=G}C5h@}4I`^V>mr)n zMOg&X%RwgCORdHc*)=d)zX5+ay63j7*zy8ih=Kjyp$xI;a{WQkM~w`ay(5A}@q;P&K4V@}QK5 zB2(+91eXq zr(5i2cIgVQ3>nT_w0_OD7f63;Lrd9NgKeZWSjfQ;;tH>;wg!iA6SGDjH;~p~p~^@~ zg*gx&hfgfh8ki;8&ExnKEcHQRkDJLc==!Ixk17BU$~~$)2$tsAmQ9~eIJqpdW~+sj z+keX`Vd3d6d2SI)PrjBuBqsCJ@ofG*7U#CfGdFa2JkJ`MFE`S0E_himM#Q9%WC2fE zpEcw`s3SU)cfu!IC&kusPv;D+E~P(qkmPy@DnWs2Q&Q|=ylC&|n#43rx-1w+tY?sI zi7qSTdUPPn9##~Z*gY?-IO%y0bzwC|j4l>BEWXO4qNw$_9bZ(%+K5T;$@KAISvm6; X7V%*%E{!?|00000NkvXXu0mjf!u7&K delta 619 zcmV-x0+jvy2ek!|Reu6XNklu_I)hh>37X+vjX@$-KuSO31S$EsZm^y$bY_hE?2%vrV>VNyd3hh-vW9dc-^ufIFBy?l} zmCe_cICBLFlry7v59R(crT$h$mAus<_n~f9xK?Mus6_Z-(caSE`P|C3y$-0(iF_T% z7&=>=UlfvEl1PP596|FKLhjJlSq7#T!VEDq48u(ZMUAqwGJ=L7{h zU_sUAm;fFHyzjxPvfp^%2+Xfd{H*5-%_qIRaOIlL`~nh$X$k9$m6iYi002ovPDHLk FV1ldNA}Ig> diff --git a/android/app/src/main/res/drawable-mdpi/ic_notification.png b/android/app/src/main/res/drawable-mdpi/ic_notification.png index 89accf5424f8a1d8b0be0eed1ffdde84bbe4f989..502b45ac86bd053171a73103a66ffba7aeed6fe8 100644 GIT binary patch delta 633 zcmV-<0*3wP1H%Q7Reu6lNkl}t&EH!>NZN57)(k+@0bC4+ zI9pk=E`f75Ftr(yA8DBhDlyE)j>c@DgMEZ(0y_S*%aJK;Zhtjp@y4sObOQr_E#{k=f@bq7IdoecSL*>j~SsuGE|)tKP)CcUE=%Q1c!<{y5((hT{xuEqL#clCsZb879Eph2lc@^k*= zz}@n12ky_9-+x`>I|h9%mUO~%#aIEj)F$CnMI6qBU!i%ZpY@P*R6(NrnIv6u9jE*? zVA~%fPRlualU|-8EK6?D5%!A0%s90&pzk6!-uBwRNyRblj%GivdYmcZf`~06^@t-q zD6(_omILd?d8C@2d10qdlYGSnFDw#4DxP#W!ciRs*(WcB@m#fqVD~PqjYEQ{3~b!+N1`D_VQb|N6RD z(^5Oz22_6OTN?3l5BmtwjHA8W6>YeHdebqTJ7!!kDY}feR5-v`ib4oU3svV_mB%W7|9yyi%+h9W+vHD+x@ohkl9^V zBPE`O-W46-wo*9xi<|5dQ8+YTSiZk;ENBCZ$Q{2|_=C=_e3X zrjqgmqTWD$0@F_*rA#HdOJ|5lks^|z&dFp(EHz1p%kCY2Z~zG&eiR}3X2<~#2Vi%x zyZ7xL105<`@rwPHRLGy(F<_6wrtHUFdmxK>mCln@Km7 zuS&CeNsx&V4p^bySYz5{_P%~J;W+{H+8g5`sX!<%VSlfnWO=uY@F3`Y)gzhiXq7)l zxAi`Lx^De4e(zah+HJN7uT$fbf{WSxEH#6L^Wo}PQ5xqsncj?+L-mL-l8`^8|$;dC?lBObBAXk4Vg`st! z5YEf_gMWf8&1;U0BjdhH1?IKBb(&eCe?3N3z;4W|{u-;dU}8Y1BkKY|6t@U8H-a0r z5RUT{Q465IzK;16D`0{*O44S_>Dt3whR@JcUUTO;Tc*Izu3Ptg&pJmi3%CnF~;T1d-#W#D5&DK-6VC zR3BdS2gd*_u%^V!F^a|klP`t0sdH*MvYqZpStCK6(x@NHM0{K@6HyCsdObqv&~2H> zV}C>-N%&i9PAL1RD#Fla4N6^+0>ZX-d||5+76fhuDJBxN`Gqy8)L_ZAD~Ch_tl`&n zz;@e{$jRoSKDa<$@V&aN4{mdHpXqGpyyxv9O^!AjbbG$Oc%aR-CAdDwuYeKEbDZhe zC|0qO*VHU#A!Du`T@N(Z{<4p%KwCd<5P#ZJz)}H|_w6by4AaTjzlo&v$IDjFno7u! z{m@>Oxd-#u=(LWJ=v6gV4Tp7K$S^&A3sG&UwVu+m(MmrVqY&=XSADaE6&qKF;p(e?rZ9Ca2ZUo}S>-{ipc-?qTX?ZZ3bmKceS&WO=8GEz2ffbY&&F zOs&VCO6uORaZK9wR%1#Wy4>HfBCC6`0ka9xA-Z4|ne13@T6Ei&B>W{3sWRSd*bLV< zKt;NIpF$5z(~0{wx-CPUjg8x^4S#x*^S)-hOd7Y*28ak>{@lWJNKeOAk;MmV)!bn6aEK@@Ef^k{Io_Q)gRk*}>oWblxauCQM{9XC0nj zfhdeJv>B(2e^blP-n3q}+jaeYOO+JG2^CT$G|~P6^jOHw_hUz)00000Ne4wvM6N<$ Ef@}VDM*si- delta 906 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 diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png b/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png index 697922b1e689da5ca7d6f7ec55e59ad6aaaa7ef1..2469d91939010cbed3598f0c264a356f343a98da 100644 GIT binary patch delta 2333 zcmV+&3F7vb4%rfrReuQXNklc5j5P%n;q)94ERVI~BQZnPl67vM2%2bx0 zK=KpBDpOf}0^40WNnN_gT{Xi2`~ z-!8CNEEWp}O{E>I1FWQ~0$4?bypEs&)T;mzdd!cobw9!u+kq-! ztOqfiLu<8Hr!wkMK>NE63jA5+LQjLS3zWn;gl{jPVyaWXsI>$9gpUB4Nd$s*;qSL+ zP!ZKA;Ndo!8Gmf?%@zDCl_{cJ1(2zUn79&R6?xjBV-KRp}Dr|+Q>(U(W}5y+qa92xz2 z>CUbO0C9jWZ5xHRhni^*=MF_E#Vol~fEr}U&Oe2`Fn=lVKXCGduHipDa7p`nG=l^5 zz6!g%Cvbh!1xL71Ks&(J#(#r6ww_wLfS176&MNcA)#pXW01k7REzb8{HIU*8pq3R6 zNccgPr^(jNQ1CVQ-cz)=CTEO$Siy^H)}t_)tld; z>Ae3C!ngNcp#nDWgC~t?UHl%-dT#a}kVW{5((2QYy#XG9a;YP1NawD-vup}b1MVf* z`1oW`+1h?n!oE$#UIEH=vm0m*R)xQpfqbG=|*0XD5atbZ;^c(oruZ3Jq(||0dEzDQ}H0w3x@%YwnhH^}GP)5eYU_4g9pw$8W z3;Wh@#eiZzdXGru$V$c&F)mXy(h&yDR>53WTmzwb!Oj+WMCr~9rQ-w0Ih2|Ks(+xH zepc#mA^MJ;Es^mVUFmH!9kp`!m-ZeWZ;-N-2^zHY2~{+(c)#DC@J(nOj0Y__-YNxf z@ko2K5U;?K4N9@p!C_DRkT)Ar3VGZEPc|sORmU(tl@DDaodWu3t3vQ(LxrDp4nsh) z=W;8k4#vFj^J0|UN}CV&;ihAUD5NL1Wz6az+7-bi%U^lssn$p}e zh@dG@$_J$j7JHG%`R0!_T0F%0faV4f&`j8rW*9+JpjefF11JK69{$^dO86XUmn*UH zbNo^P=$9uR@2D3RuxQ30NES=Z-NFj@M=QzC|h7U6qG$$uD96TNvV z8&ZJxa_XaRQh@IP#R)Xm`ZN*KD}bVY0S(2>oyU0x&n(OG~tVmBs2wgxfz(+IU zK~&OU5tbzHph&Yu10w#&Wi=8VrsYacIs=mz$s!s9BK9 z?**yYw0_Rdrv99|C^wlIVnZS}moQjX?6&w$d7Sf0lESdzm{QqOw%so^J6q;+5fUuS zyaLoevAX|CFqC;)a`nZ7utEb=)`fycn?drDCr6yk7#%MLc4pO@q18& zW!QO1b(J)Q`wXdxhB`R7s0_=FZZn=mT_wE&)PS5`0fe_+z<;u%E6`z4SIJyG{r!j6 z@XZEAO*=DJx){+r0}rTb>+EZ6@elB?uZ9uZpE1h%i|MKM#pc%3~zsgi4`o1 zZ5%1$nL6gG!ZCszg!mJc=zI!s#*K)M4|{WKg47s5wSUs`wGs+}Q*l7b*mi!Hr!+Bp zsO(Om!#pW8+Q(XRpoKEQO4tJ+t|8y@il^>z>6QR%cSrx zz#(NF=!`vqo#4wKLK%$Bz(^TNxGHJO{ZeTO?&sZ0Lz%ei4fP<$CW>g5SKg*v1&qjd zWNdxNIDb9~zI<1?8U>7Kx+2sW$LCd+Xs%WPBcy4fQpuwJjUVdl`mk(Mlm7N~BG(vN zouM*1P$japQ$~2bYa8_{U=pQ_w%pnyj|0qcKD`b##~_!s2QcV0B|_UA1yehLufUBs1}JY?eb&HCy^qx00000NkvXXu0mjf DE8%&D delta 1750 zcmV;{1}XX35|<8;ReuJoNkl2&&@P^17jQ6FbYPL;e@ z@=i&n%6|^YlaZgK4N}pu!%A0j zsieU6DU^IxlF_lDUOLBal-|X?l5;v_uuknI;-ysbnGOy0QWuC@@tc%51Vcc(nqSyo zN+q9YL`I2%pd*?)(os!l>Tt8BqIJZS(KyVN+>8-91vdb6VaCcoAwO8j3)1m?9YR)8 zJa3Gj8R3xjgMaz-eV$6mOx^zn#RzmE`we~+N@hxO3XHnu8N!6T*AyG-p)$Dp`e&o` zjJAY%UcP4uH*$&v=#*7rI7JLE0=Ee5iedn|Ciy(<*;hFwr^py+h}|2&D1QjgQ9QUn zPeWw1OB|G6?EIkz09{7RJKkkRyJVp9_afDI0i7G}O@9Kq!>(N?bb;H~=a>7G>Z8YG z%d)5PxuEr}_#~PPQ2v|}VL|^I?wpPktee~Kl-ve$zt9CyQoaRryJx?~Nc8vnzvzgu z=!gRr_p%V(v2c?TM;z@yM}{`;ZNGnGxiDuRsaJ@bhCjNtlgDB>&vt$(g`cbU%+);> zGz9c>J%3)6EJOl%0A2V>lwH4{c3kv=RP-3tm~i zPwH1Ud`|&5lpIjwqPywF1Ze2(Uxeda7JuZON1>Zuol0{T5D63z$esR0^ZaS! zhZ)J^cxIH4kcO?~Xw;6IE+`j%SVcP~CN3W6<-oBvF6w`pHDRgN8-wyUN5w@4hnXsc zb3|ktKg7cw*L5i9MmLF!0)yeqXb*tgK7`s0)h_5vxaK0o{ryq8;$f5v;j~qGJ8gck z@PCsMLwOXA^O)6t1~?T?UQl8v3*mUqf2LT^M(ko~vQ%OKruo?xFmSnh!Z|?l|4I4o zNV+@gV*tsQCA#@79A6nA6HYqn{$5X{9FTEE?45AZABu-l=;m@Cs=?iZ?uZ7Mn8u;p za?;zerulPigtiaYX+F{xFagf9<&-DU1%Ji5#=<_(LwBnv$kvTkQNowXa!fQpVq8w9 z!U+{6Mny6}${iz<46tL^04d7Z9ZSgoDF^tIS&l8aCTukTS0*B=3xw#B+}gW99-3aU z0V=XL$Ym5yi|BWi7-qCTNDZBT*#${$J<>%I-H17W4NwUuB?GvV3&&Rm5L@gh;eU$M z)%(=P03RsfirCvYH4#o_If)~oy)nZ$CAYomu%9%3By~;RgsucRbV-J&3BMxLjGr3lRRe5; zonLp0svlhmgGrw$Fo*;S4CE=k|9_0rY>u7_*X3v^r-T*so8GQ@^-UB=0>@kR}}S?2ju-yg=#X zk{qV^w&ehh_t}zzr`-?bP;vlt+|T7>W;v~Og8Q`PVOXhO$xgjIeL^#%(0>!$(Qh&C zoIF4zkO$D4R7iAAaDQXDHs=Btf$oUB$2pQmX$SJs1wrct`v~+h_%_^K zHS}swwv}=p=*SUVPzm4p)#?K0mK)@hu(cqB*@+45*=$CM6~Bg-U+lZYer)1%347gVMzMl^OWl`O)yUJ?}--K@Uyc8?u#av#hhMT~-)}2#epk2&0{C_v|44P}l+RpYH z`44O7(3OWwKAO*phHYniW`q|b$tleCx?j}&gEl~pwV`uHx(8@1A77bIR!UQ`Cp6B) z!nu;Kdsm-I7G#70_~cl?#^w&QCopy>|BBl zTQA@r8oE$GH#_XKZBJ*k*3h9~J*k1i*i#BWJ+=;M7o=M@qljptF~BBRFDT2#;NdGA s&(|@2Te!Jw2rK)q`CQc@Vhthx2YOXZD-qFx*#H0l07*qoM6N<$g8bW7ivR!s From 9d281557e187a502e9c36c8a4212730fe0270301 Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Thu, 31 Aug 2023 15:49:36 +0500 Subject: [PATCH 082/315] fix: add a comment --- src/components/CustomStatusBar/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/CustomStatusBar/index.js b/src/components/CustomStatusBar/index.js index 4d2aa919e73b..4848e6e35f59 100644 --- a/src/components/CustomStatusBar/index.js +++ b/src/components/CustomStatusBar/index.js @@ -6,6 +6,9 @@ import themeColors from '../../styles/themes/default'; function CustomStatusBar() { useEffect(() => { Navigation.isNavigationReady().then(() => { + // Set the status bar colour depending on the current route. + // If we don't have any colour defined for a route, fall back to + // appBG color. const currentRoute = navigationRef.getCurrentRoute(); let currentScreenBackgroundColor = themeColors.appBG; if (currentRoute && 'name' in currentRoute && currentRoute.name in themeColors.PAGE_BACKGROUND_COLORS) { From 0665ea020b6f1bd5cc87a3fcbb48e4a5a8ef2df6 Mon Sep 17 00:00:00 2001 From: Pierre Michel Date: Thu, 31 Aug 2023 04:58:15 -0600 Subject: [PATCH 083/315] Add withCurrentReportIDPropTypes and use the prop currentReportID instead of calling getTopmostReportId Signed-off-by: Pierre Michel --- src/pages/home/ReportScreen.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index 5ef8011c0aeb..5d0cb5ab9bf6 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -37,7 +37,7 @@ import ReportScreenContext from './ReportScreenContext'; import TaskHeaderActionButton from '../../components/TaskHeaderActionButton'; import DragAndDropProvider from '../../components/DragAndDrop/Provider'; import usePrevious from '../../hooks/usePrevious'; -import withCurrentReportID from '../../components/withCurrentReportID'; +import withCurrentReportID, {withCurrentReportIDPropTypes, withCurrentReportIDDefaultProps} from '../../components/withCurrentReportID'; const propTypes = { /** Navigation route context info provided by react navigation */ @@ -89,6 +89,7 @@ const propTypes = { ...windowDimensionsPropTypes, ...viewportOffsetTopPropTypes, + ...withCurrentReportIDPropTypes, }; const defaultProps = { @@ -103,6 +104,7 @@ const defaultProps = { policies: {}, accountManagerReportID: null, personalDetails: {}, + ...withCurrentReportIDDefaultProps, }; /** @@ -132,6 +134,7 @@ function ReportScreen({ viewportOffsetTop, isComposerFullSize, errors, + currentReportID, }) { const firstRenderRef = useRef(true); const flatListRef = useRef(); @@ -158,7 +161,7 @@ function ReportScreen({ const policy = policies[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`]; - const isTopMostReportId = Navigation.getTopmostReportId() === getReportID(route); + const isTopMostReportId = currentReportID === getReportID(route); let headerView = ( Date: Fri, 1 Sep 2023 03:49:25 +0200 Subject: [PATCH 084/315] adding new method to return promise on reconnectApp --- src/libs/actions/App.js | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index 56a313e81c0b..2e3185ea4d1b 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -207,6 +207,49 @@ function reconnectApp(updateIDFrom = 0) { }); } +/** + * Fetches data when the app will call reconnectApp without params for the last time. This is a separate function + * because it will follow patterns that are not recommended so we can be sure we're not putting the app in a unusable + * state because of race conditions between reconnectApp and other pusher updates being applied at the same time. + * @return {Promise} + */ +function lastReconnectAppAfterActivatingReliableUpdates() { + console.debug(`[OnyxUpdates] Executing last reconnect app with promise`); + return getPolicyParamsForOpenOrReconnect().then((policyParams) => { + const params = {...policyParams}; + + // When the app reconnects we do a fast "sync" of the LHN and only return chats that have new messages. We achieve this by sending the most recent reportActionID. + // we have locally. And then only update the user about chats with messages that have occurred after that reportActionID. + // + // - Look through the local report actions and reports to find the most recently modified report action or report. + // - We send this to the server so that it can compute which new chats the user needs to see and return only those as an optimization. + Timing.start(CONST.TIMING.CALCULATE_MOST_RECENT_LAST_MODIFIED_ACTION); + params.mostRecentReportActionLastModified = ReportActionsUtils.getMostRecentReportActionLastModified(); + Timing.end(CONST.TIMING.CALCULATE_MOST_RECENT_LAST_MODIFIED_ACTION, '', 500); + + // Include the update IDs when reconnecting so that the server can send incremental updates if they are available. + // Otherwise, a full set of app data will be returned. + if (updateIDFrom) { + params.updateIDFrom = updateIDFrom; + } + + // It is SUPER BAD FORM to return promises from action methods. + // DO NOT FOLLOW THIS PATTERN!!!!! + // It was absolutely necessary in order to not break the app while migrating to the new reliable updates pattern. This method will be removed + // as soon as we have everyone migrated to it + // eslint-disable-next-line rulesdir/no-api-side-effects-method + return API.makeRequestWithSideEffects( + 'ReconnectApp', + { + updateIDFrom, + updateIDTo, + }, + getOnyxDataForOpenOrReconnect(), + ); + }); + +} + /** * Fetches data when the client has discovered it missed some Onyx updates from the server * @param {Number} [updateIDFrom] the ID of the Onyx update that we want to start fetching from @@ -435,4 +478,5 @@ export { beginDeepLinkRedirectAfterTransition, createWorkspaceAndNavigateToIt, getMissingOnyxUpdates, + lastReconnectAppAfterActivatingReliableUpdates, }; From d5cc741047ab671767c6b1967685a083ed3fad70 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 03:49:46 +0200 Subject: [PATCH 085/315] adding usage to new method to reconnect app --- src/libs/actions/OnyxUpdateManager.js | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 97456d8d704f..c29c83b3885b 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -27,6 +27,7 @@ function applyHTTPSOnyxUpdates({request, responseData}) { console.debug('[OnyxUpdateManager] Applying https update'); // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in // the UI. See https://github.com/Expensify/App/issues/12775 for more info. + // 2023-08-31 - const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; // First apply any onyx data updates that are being sent back from the API. We wait for this to complete and then @@ -105,11 +106,6 @@ export default () => { return; } - // Since people will have migrations hapening in their accounts while they use the app, we don't want to trigger - // a full ReconnectApp and then trigger a GetOnyxUpdates. Let's use this as a control variable until we enable - // the beta to all users. - let isUserGettingReliableUpdatesForTheVeryFirstTime = false; - const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; // This can happen when a user has just started getting reliable updates from the server but they haven't @@ -120,16 +116,13 @@ export default () => { !lastUpdateIDAppliedToClient && previousUpdateIDFromServer > 0 && (updateParams.type === CONST.ONYX_UPDATE_TYPES.PUSHER || - (updateParams.type === CONST.ONYX_UPDATE_TYPES.HTTPS && (updateParams.data.request.command !== 'OpenApp' || updateParams.data.request.command !== 'ReconnectApp'))) + (updateParams.type === CONST.ONYX_UPDATE_TYPES.HTTPS && updateParams.data.request.command !== 'OpenApp' && updateParams.data.request.command !== 'ReconnectApp')) ) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); - App.reconnectApp(); - isUserGettingReliableUpdatesForTheVeryFirstTime = true; - } - - // If the previous update from the server does not match the last update the client got, then the client is missing some updates. - // getMissingOnyxUpdates will fetch updates starting from the last update this client got and going to the last update the server sent. - if (!isUserGettingReliableUpdatesForTheVeryFirstTime && previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { + App.lastReconnectAppAfterActivatingReliableUpdates().finally(() => { + applyOnyxUpdates(updateParams); + }); + } else if (previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { console.debug(`[OnyxUpdateManager] Client is behind the server by ${previousUpdateIDFromServer - lastUpdateIDAppliedToClient} so fetching incremental updates`); Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { lastUpdateIDFromServer, From c613170dfffd9afa6ef657740eb79a7e79560c6b Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 04:14:13 +0200 Subject: [PATCH 086/315] refactor the code a little bit --- src/libs/actions/OnyxUpdateManager.js | 80 +++++++++++++-------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index c29c83b3885b..46130467c86d 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -108,51 +108,51 @@ export default () => { const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; - // This can happen when a user has just started getting reliable updates from the server but they haven't - // had an OpenApp or ReconnectApp call yet. This can result in never getting reliable updates because - // lastUpdateIDAppliedToClient will always be null. For this case, reconnectApp() will be triggered for them - // to kick start the reliable updates. We also filter OpenApp and ReconnectApp so we don't create a loop. - if ( - !lastUpdateIDAppliedToClient && - previousUpdateIDFromServer > 0 && - (updateParams.type === CONST.ONYX_UPDATE_TYPES.PUSHER || - (updateParams.type === CONST.ONYX_UPDATE_TYPES.HTTPS && updateParams.data.request.command !== 'OpenApp' && updateParams.data.request.command !== 'ReconnectApp')) - ) { - console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); - App.lastReconnectAppAfterActivatingReliableUpdates().finally(() => { - applyOnyxUpdates(updateParams); - }); - } else if (previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { - console.debug(`[OnyxUpdateManager] Client is behind the server by ${previousUpdateIDFromServer - lastUpdateIDAppliedToClient} so fetching incremental updates`); - Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { - lastUpdateIDFromServer, - previousUpdateIDFromServer, - lastUpdateIDAppliedToClient, - }); + // If we don't have a previousUpdateID from the request, or if we if it's the same as we currently have stored + // we can simply apply the updates and move on. + if (!previousUpdateIDFromServer || lastUpdateIDAppliedToClient === previousUpdateIDFromServer) { + console.debug(`[OnyxUpdateManager] Client is in sync with the server, applying updates`); + applyOnyxUpdates(updateParams); + } else { - // Pause the sequential queue while the missing Onyx updates are fetched from the server. This is important - // so that the updates are applied in their correct and specific order. If this queue was not paused, then - // there would be a lot of onyx data being applied while we are fetching the missing updates and that would - // put them all out of order. + // In cases where we received a previousUpdateID and it doesn't match our lastUpdateIDAppliedToClient + // we need to perform one of the 2 possible cases: + // + // 1. This is the first time we're receiving an lastUpdateID, so we need to do a final reconnectApp before + // fully migrating to the reliable updates mode; + // 2. This this client already has the reliable updates mode enabled, but it's missing some updates and it + // needs to fech those. + // + // To to both of those, we need to pause the sequential queue. This is important so that the updates are + // applied in their correct and specific order. If this queue was not paused, then there would be a lot of + // onyx data being applied while we are fetching the missing updates and that would put them all out of order. SequentialQueue.pause(); - App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer).finally(() => { - console.debug('[OnyxUpdateManager] Done Getting missing onyx updates'); - - // The onyx update from the initial request could have been either from HTTPS or Pusher. - // Now that the missing onyx updates have been applied, we can apply the original onyxUpdates from - // the API request. - applyOnyxUpdates(updateParams).then(() => { - console.debug('[OnyxUpdateManager] Done applying all updates'); - - // Finally, the missing updates were applied, the original update was applied, and now the - // sequential queue is free to continue. - SequentialQueue.unpause(); + let promise; + + // The flow below is setting the promise to a reconnect app to address flow (1) explained above. + if (!lastUpdateIDAppliedToClient && + (updateParams.type === CONST.ONYX_UPDATE_TYPES.PUSHER || updateParams.data.request.command !== 'OpenApp' && updateParams.data.request.command !== 'ReconnectApp') + ) { + console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); + Log.info('Client has not gotten reliable updates before so reconnecting the app to start the process'); + promise = App.lastReconnectAppAfterActivatingReliableUpdates(); + } else if (previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { + // The flow below is setting the promise to a getMissingOnyxUpdates to address flow (2) explained above. + console.debug(`[OnyxUpdateManager] Client is behind the server by ${previousUpdateIDFromServer - lastUpdateIDAppliedToClient} so fetching incremental updates`); + Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { + lastUpdateIDFromServer, + previousUpdateIDFromServer, + lastUpdateIDAppliedToClient, }); + promise = App.getMissingOnyxUpdates(lastUpdateIDAppliedToClient, lastUpdateIDFromServer); + } + + promise.finally(() => { + console.debug('[OnyxUpdateManager] Done applying all updates'); + applyOnyxUpdates(updateParams); + SequentialQueue.unpause(); }); - } else { - console.debug(`[OnyxUpdateManager] Client is in sync with the server`); - applyOnyxUpdates(updateParams); } if (lastUpdateIDFromServer > lastUpdateIDAppliedToClient) { From 377cb9353cac64e9e714b516ca08b84cb233c50c Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 04:14:30 +0200 Subject: [PATCH 087/315] adding a few more checks and refactoring --- src/libs/actions/OnyxUpdateManager.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 46130467c86d..0b952cad9ef5 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -108,13 +108,14 @@ export default () => { const {lastUpdateIDFromServer, previousUpdateIDFromServer, updateParams} = val; - // If we don't have a previousUpdateID from the request, or if we if it's the same as we currently have stored + // If we don't have a previousUpdateID from the request, or if we if it's the less or equal w we currently have stored // we can simply apply the updates and move on. if (!previousUpdateIDFromServer || lastUpdateIDAppliedToClient === previousUpdateIDFromServer) { console.debug(`[OnyxUpdateManager] Client is in sync with the server, applying updates`); applyOnyxUpdates(updateParams); + } else if (lastUpdateIDFromServer < lastUpdateIDAppliedToClient) { + console.debug(`[OnyxUpdateManager] Client is more up to date than the update received, skipping processing`); } else { - // In cases where we received a previousUpdateID and it doesn't match our lastUpdateIDAppliedToClient // we need to perform one of the 2 possible cases: // @@ -127,7 +128,6 @@ export default () => { // applied in their correct and specific order. If this queue was not paused, then there would be a lot of // onyx data being applied while we are fetching the missing updates and that would put them all out of order. SequentialQueue.pause(); - let promise; // The flow below is setting the promise to a reconnect app to address flow (1) explained above. @@ -137,7 +137,7 @@ export default () => { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); Log.info('Client has not gotten reliable updates before so reconnecting the app to start the process'); promise = App.lastReconnectAppAfterActivatingReliableUpdates(); - } else if (previousUpdateIDFromServer && lastUpdateIDAppliedToClient < previousUpdateIDFromServer) { + } else { // The flow below is setting the promise to a getMissingOnyxUpdates to address flow (2) explained above. console.debug(`[OnyxUpdateManager] Client is behind the server by ${previousUpdateIDFromServer - lastUpdateIDAppliedToClient} so fetching incremental updates`); Log.info('Gap detected in update IDs from server so fetching incremental updates', true, { From df82f2efdb04e0e32215791f2a06173bdfbb65ae Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 04:21:09 +0200 Subject: [PATCH 088/315] adding check if queue is paused before moving on with applying queued onyx updates --- src/libs/Network/SequentialQueue.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/libs/Network/SequentialQueue.js b/src/libs/Network/SequentialQueue.js index f8ea396663a5..4894456fa789 100644 --- a/src/libs/Network/SequentialQueue.js +++ b/src/libs/Network/SequentialQueue.js @@ -94,7 +94,7 @@ function flush() { isSequentialQueueRunning = false; resolveIsReadyPromise(); currentRequest = null; - Onyx.update(QueuedOnyxUpdates.getQueuedUpdates()).then(QueuedOnyxUpdates.clear); + flushAndClearOnyxQueue(); }); }, }); @@ -149,6 +149,17 @@ function waitForIdle() { return isReadyPromise; } + +/** + * Gets the current Onyx queued updates, apply them and clear the queue if the queue is not paused. + */ +function flushAndClearOnyxQueue() { + if (isQueuePaused) { + return; + } + Onyx.update(QueuedOnyxUpdates.getQueuedUpdates()).then(QueuedOnyxUpdates.clear); +} + /** * Puts the queue into a paused state so that no requests will be processed */ @@ -172,6 +183,10 @@ function unpause() { const numberOfPersistedRequests = PersistedRequests.getAll().length || 0; console.debug(`[SequentialQueue] Unpausing the queue and flushing ${numberOfPersistedRequests} requests`); isQueuePaused = false; + + // Since the writes may happen async to the queue, in case we had any writes happen while the queue was paused + // (because of race conditions), let's also apply the queued updates and clear them before continuing the queue. + flushAndClearOnyxQueue(); flush(); } From 181c54a317baa79b47bc815a5e715e6a38043e06 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 04:21:39 +0200 Subject: [PATCH 089/315] prettier --- src/libs/Network/SequentialQueue.js | 3 +-- src/libs/actions/App.js | 3 +-- src/libs/actions/OnyxUpdateManager.js | 17 +++++++++-------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/libs/Network/SequentialQueue.js b/src/libs/Network/SequentialQueue.js index 4894456fa789..10c1329cca28 100644 --- a/src/libs/Network/SequentialQueue.js +++ b/src/libs/Network/SequentialQueue.js @@ -149,7 +149,6 @@ function waitForIdle() { return isReadyPromise; } - /** * Gets the current Onyx queued updates, apply them and clear the queue if the queue is not paused. */ @@ -184,7 +183,7 @@ function unpause() { console.debug(`[SequentialQueue] Unpausing the queue and flushing ${numberOfPersistedRequests} requests`); isQueuePaused = false; - // Since the writes may happen async to the queue, in case we had any writes happen while the queue was paused + // Since the writes may happen async to the queue, in case we had any writes happen while the queue was paused // (because of race conditions), let's also apply the queued updates and clear them before continuing the queue. flushAndClearOnyxQueue(); flush(); diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index 2e3185ea4d1b..820173a7be8e 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -232,7 +232,7 @@ function lastReconnectAppAfterActivatingReliableUpdates() { if (updateIDFrom) { params.updateIDFrom = updateIDFrom; } - + // It is SUPER BAD FORM to return promises from action methods. // DO NOT FOLLOW THIS PATTERN!!!!! // It was absolutely necessary in order to not break the app while migrating to the new reliable updates pattern. This method will be removed @@ -247,7 +247,6 @@ function lastReconnectAppAfterActivatingReliableUpdates() { getOnyxDataForOpenOrReconnect(), ); }); - } /** diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 0b952cad9ef5..83fda3234557 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -27,7 +27,7 @@ function applyHTTPSOnyxUpdates({request, responseData}) { console.debug('[OnyxUpdateManager] Applying https update'); // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in // the UI. See https://github.com/Expensify/App/issues/12775 for more info. - // 2023-08-31 - + // 2023-08-31 - const updateHandler = request.data.apiRequestType === CONST.API_REQUEST_TYPE.WRITE ? QueuedOnyxUpdates.queueOnyxUpdates : Onyx.update; // First apply any onyx data updates that are being sent back from the API. We wait for this to complete and then @@ -113,7 +113,7 @@ export default () => { if (!previousUpdateIDFromServer || lastUpdateIDAppliedToClient === previousUpdateIDFromServer) { console.debug(`[OnyxUpdateManager] Client is in sync with the server, applying updates`); applyOnyxUpdates(updateParams); - } else if (lastUpdateIDFromServer < lastUpdateIDAppliedToClient) { + } else if (lastUpdateIDFromServer < lastUpdateIDAppliedToClient) { console.debug(`[OnyxUpdateManager] Client is more up to date than the update received, skipping processing`); } else { // In cases where we received a previousUpdateID and it doesn't match our lastUpdateIDAppliedToClient @@ -121,18 +121,19 @@ export default () => { // // 1. This is the first time we're receiving an lastUpdateID, so we need to do a final reconnectApp before // fully migrating to the reliable updates mode; - // 2. This this client already has the reliable updates mode enabled, but it's missing some updates and it + // 2. This this client already has the reliable updates mode enabled, but it's missing some updates and it // needs to fech those. // - // To to both of those, we need to pause the sequential queue. This is important so that the updates are - // applied in their correct and specific order. If this queue was not paused, then there would be a lot of + // To to both of those, we need to pause the sequential queue. This is important so that the updates are + // applied in their correct and specific order. If this queue was not paused, then there would be a lot of // onyx data being applied while we are fetching the missing updates and that would put them all out of order. SequentialQueue.pause(); let promise; - + // The flow below is setting the promise to a reconnect app to address flow (1) explained above. - if (!lastUpdateIDAppliedToClient && - (updateParams.type === CONST.ONYX_UPDATE_TYPES.PUSHER || updateParams.data.request.command !== 'OpenApp' && updateParams.data.request.command !== 'ReconnectApp') + if ( + !lastUpdateIDAppliedToClient && + (updateParams.type === CONST.ONYX_UPDATE_TYPES.PUSHER || (updateParams.data.request.command !== 'OpenApp' && updateParams.data.request.command !== 'ReconnectApp')) ) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); Log.info('Client has not gotten reliable updates before so reconnecting the app to start the process'); From 97ef06e729b189ef0bab59ef6bd0a8972008aaee Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 04:43:36 +0200 Subject: [PATCH 090/315] prettier, some refactoring and adding the unpause in the right place --- src/libs/Network/SequentialQueue.js | 6 +++--- src/libs/actions/App.js | 15 +-------------- src/libs/actions/OnyxUpdateManager.js | 22 +++++++++++++++------- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/libs/Network/SequentialQueue.js b/src/libs/Network/SequentialQueue.js index 10c1329cca28..27dd0755c966 100644 --- a/src/libs/Network/SequentialQueue.js +++ b/src/libs/Network/SequentialQueue.js @@ -94,7 +94,7 @@ function flush() { isSequentialQueueRunning = false; resolveIsReadyPromise(); currentRequest = null; - flushAndClearOnyxQueue(); + flushAndClearOnyxUpdatesQueue(); }); }, }); @@ -152,7 +152,7 @@ function waitForIdle() { /** * Gets the current Onyx queued updates, apply them and clear the queue if the queue is not paused. */ -function flushAndClearOnyxQueue() { +function flushAndClearOnyxUpdatesQueue() { if (isQueuePaused) { return; } @@ -185,7 +185,7 @@ function unpause() { // Since the writes may happen async to the queue, in case we had any writes happen while the queue was paused // (because of race conditions), let's also apply the queued updates and clear them before continuing the queue. - flushAndClearOnyxQueue(); + flushAndClearOnyxUpdatesQueue(); flush(); } diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index 820173a7be8e..0bba4249bf11 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -227,25 +227,12 @@ function lastReconnectAppAfterActivatingReliableUpdates() { params.mostRecentReportActionLastModified = ReportActionsUtils.getMostRecentReportActionLastModified(); Timing.end(CONST.TIMING.CALCULATE_MOST_RECENT_LAST_MODIFIED_ACTION, '', 500); - // Include the update IDs when reconnecting so that the server can send incremental updates if they are available. - // Otherwise, a full set of app data will be returned. - if (updateIDFrom) { - params.updateIDFrom = updateIDFrom; - } - // It is SUPER BAD FORM to return promises from action methods. // DO NOT FOLLOW THIS PATTERN!!!!! // It was absolutely necessary in order to not break the app while migrating to the new reliable updates pattern. This method will be removed // as soon as we have everyone migrated to it // eslint-disable-next-line rulesdir/no-api-side-effects-method - return API.makeRequestWithSideEffects( - 'ReconnectApp', - { - updateIDFrom, - updateIDTo, - }, - getOnyxDataForOpenOrReconnect(), - ); + return API.makeRequestWithSideEffects('ReconnectApp', params, getOnyxDataForOpenOrReconnect()); }); } diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 83fda3234557..28c74874a564 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -21,9 +21,10 @@ import * as App from './App'; * @param {Object} data * @param {Object} data.request * @param {Object} data.responseData + * @param {Boolean} data.unpauseQueue * @returns {Promise} */ -function applyHTTPSOnyxUpdates({request, responseData}) { +function applyHTTPSOnyxUpdates({request, responseData, unpauseQueue}) { console.debug('[OnyxUpdateManager] Applying https update'); // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in // the UI. See https://github.com/Expensify/App/issues/12775 for more info. @@ -47,6 +48,9 @@ function applyHTTPSOnyxUpdates({request, responseData}) { return Promise.resolve(); }) .then(() => { + if (unpauseQueue) { + SequentialQueue.unpause(); + } console.debug('[OnyxUpdateManager] Done applying HTTPS update'); }); } @@ -54,9 +58,10 @@ function applyHTTPSOnyxUpdates({request, responseData}) { /** * @param {Object} data * @param {Object} data.updates + * @param {Boolean} data.unpauseQueue * @returns {Promise} */ -function applyPusherOnyxUpdates({updates}) { +function applyPusherOnyxUpdates({updates, unpauseQueue}) { console.debug('[OnyxUpdateManager] Applying pusher update'); const pusherEventPromises = _.reduce( updates, @@ -67,6 +72,9 @@ function applyPusherOnyxUpdates({updates}) { [], ); return Promise.all(pusherEventPromises).then(() => { + if (unpauseQueue) { + SequentialQueue.unpause(); + } console.debug('[OnyxUpdateManager] Done applying Pusher update'); }); } @@ -74,19 +82,20 @@ function applyPusherOnyxUpdates({updates}) { /** * @param {Object[]} updateParams * @param {String} updateParams.type + * @param {Boolean} updateParams.unpauseQueue * @param {Object} updateParams.data * @param {Object} [updateParams.data.request] Exists if updateParams.type === 'https' * @param {Object} [updateParams.data.response] Exists if updateParams.type === 'https' * @param {Object} [updateParams.data.updates] Exists if updateParams.type === 'pusher' * @returns {Promise} */ -function applyOnyxUpdates({type, data}) { +function applyOnyxUpdates({type, data, unpauseQueue = false}) { console.debug(`[OnyxUpdateManager] Applying update type: ${type}`, data); if (type === CONST.ONYX_UPDATE_TYPES.HTTPS) { - return applyHTTPSOnyxUpdates(data); + return applyHTTPSOnyxUpdates({...data, unpauseQueue}); } if (type === CONST.ONYX_UPDATE_TYPES.PUSHER) { - return applyPusherOnyxUpdates(data); + return applyPusherOnyxUpdates({...data, unpauseQueue}); } } @@ -151,8 +160,7 @@ export default () => { promise.finally(() => { console.debug('[OnyxUpdateManager] Done applying all updates'); - applyOnyxUpdates(updateParams); - SequentialQueue.unpause(); + applyOnyxUpdates({...updateParams, unpauseQueue: true}); }); } From 03da9725ba4ba8604a3a34c2b54b25c67dfb1930 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 04:45:30 +0200 Subject: [PATCH 091/315] using the promise instead of passing variable down --- src/libs/actions/OnyxUpdateManager.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 28c74874a564..24bceda6e181 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -21,10 +21,9 @@ import * as App from './App'; * @param {Object} data * @param {Object} data.request * @param {Object} data.responseData - * @param {Boolean} data.unpauseQueue * @returns {Promise} */ -function applyHTTPSOnyxUpdates({request, responseData, unpauseQueue}) { +function applyHTTPSOnyxUpdates({request, responseData}) { console.debug('[OnyxUpdateManager] Applying https update'); // For most requests we can immediately update Onyx. For write requests we queue the updates and apply them after the sequential queue has flushed to prevent a replay effect in // the UI. See https://github.com/Expensify/App/issues/12775 for more info. @@ -48,9 +47,6 @@ function applyHTTPSOnyxUpdates({request, responseData, unpauseQueue}) { return Promise.resolve(); }) .then(() => { - if (unpauseQueue) { - SequentialQueue.unpause(); - } console.debug('[OnyxUpdateManager] Done applying HTTPS update'); }); } @@ -58,10 +54,9 @@ function applyHTTPSOnyxUpdates({request, responseData, unpauseQueue}) { /** * @param {Object} data * @param {Object} data.updates - * @param {Boolean} data.unpauseQueue * @returns {Promise} */ -function applyPusherOnyxUpdates({updates, unpauseQueue}) { +function applyPusherOnyxUpdates({updates}) { console.debug('[OnyxUpdateManager] Applying pusher update'); const pusherEventPromises = _.reduce( updates, @@ -72,9 +67,6 @@ function applyPusherOnyxUpdates({updates, unpauseQueue}) { [], ); return Promise.all(pusherEventPromises).then(() => { - if (unpauseQueue) { - SequentialQueue.unpause(); - } console.debug('[OnyxUpdateManager] Done applying Pusher update'); }); } @@ -160,7 +152,9 @@ export default () => { promise.finally(() => { console.debug('[OnyxUpdateManager] Done applying all updates'); - applyOnyxUpdates({...updateParams, unpauseQueue: true}); + applyOnyxUpdates(updateParams).finally(() => { + SequentialQueue.unpause(); + }); }); } From d5fd7edcc7c9d4a019036321343bdb4c222a9f38 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 05:35:12 +0200 Subject: [PATCH 092/315] linting files and adjusting checks --- src/libs/Network/SequentialQueue.js | 21 +++++++++++---------- src/libs/actions/OnyxUpdateManager.js | 7 ++----- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/libs/Network/SequentialQueue.js b/src/libs/Network/SequentialQueue.js index 27dd0755c966..2bbc766d868f 100644 --- a/src/libs/Network/SequentialQueue.js +++ b/src/libs/Network/SequentialQueue.js @@ -62,6 +62,17 @@ function process() { return currentRequest; } + +/** + * Gets the current Onyx queued updates, apply them and clear the queue if the queue is not paused. + */ +function flushAndClearOnyxUpdatesQueue() { + if (isQueuePaused) { + return; + } + Onyx.update(QueuedOnyxUpdates.getQueuedUpdates()).then(QueuedOnyxUpdates.clear); +} + function flush() { // When the queue is paused, return early. This will keep an requests in the queue and they will get flushed again when the queue is unpaused if (isQueuePaused) { @@ -149,16 +160,6 @@ function waitForIdle() { return isReadyPromise; } -/** - * Gets the current Onyx queued updates, apply them and clear the queue if the queue is not paused. - */ -function flushAndClearOnyxUpdatesQueue() { - if (isQueuePaused) { - return; - } - Onyx.update(QueuedOnyxUpdates.getQueuedUpdates()).then(QueuedOnyxUpdates.clear); -} - /** * Puts the queue into a paused state so that no requests will be processed */ diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index 24bceda6e181..f1a9973ade4c 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -111,7 +111,7 @@ export default () => { // If we don't have a previousUpdateID from the request, or if we if it's the less or equal w we currently have stored // we can simply apply the updates and move on. - if (!previousUpdateIDFromServer || lastUpdateIDAppliedToClient === previousUpdateIDFromServer) { + if (!previousUpdateIDFromServer || lastUpdateIDAppliedToClient === previousUpdateIDFromServer || (updateParams.type === CONST.ONYX_UPDATE_TYPES.HTTPS && (updateParams.data.request.command === 'OpenApp' || updateParams.data.request.command === 'ReconnectApp'))) { console.debug(`[OnyxUpdateManager] Client is in sync with the server, applying updates`); applyOnyxUpdates(updateParams); } else if (lastUpdateIDFromServer < lastUpdateIDAppliedToClient) { @@ -132,10 +132,7 @@ export default () => { let promise; // The flow below is setting the promise to a reconnect app to address flow (1) explained above. - if ( - !lastUpdateIDAppliedToClient && - (updateParams.type === CONST.ONYX_UPDATE_TYPES.PUSHER || (updateParams.data.request.command !== 'OpenApp' && updateParams.data.request.command !== 'ReconnectApp')) - ) { + if (!lastUpdateIDAppliedToClient) { console.debug('[OnyxUpdateManager] Client has not gotten reliable updates before so reconnecting the app to start the process'); Log.info('Client has not gotten reliable updates before so reconnecting the app to start the process'); promise = App.lastReconnectAppAfterActivatingReliableUpdates(); From b8abf43c92492b8892836974f3f6ac5b0378fd51 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Fri, 1 Sep 2023 06:10:51 +0200 Subject: [PATCH 093/315] adding the right check in lastUpdateAppliedToClient --- src/libs/actions/OnyxUpdateManager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/OnyxUpdateManager.js b/src/libs/actions/OnyxUpdateManager.js index f1a9973ade4c..0028ee9776ec 100644 --- a/src/libs/actions/OnyxUpdateManager.js +++ b/src/libs/actions/OnyxUpdateManager.js @@ -114,7 +114,7 @@ export default () => { if (!previousUpdateIDFromServer || lastUpdateIDAppliedToClient === previousUpdateIDFromServer || (updateParams.type === CONST.ONYX_UPDATE_TYPES.HTTPS && (updateParams.data.request.command === 'OpenApp' || updateParams.data.request.command === 'ReconnectApp'))) { console.debug(`[OnyxUpdateManager] Client is in sync with the server, applying updates`); applyOnyxUpdates(updateParams); - } else if (lastUpdateIDFromServer < lastUpdateIDAppliedToClient) { + } else if (lastUpdateIDFromServer <= lastUpdateIDAppliedToClient) { console.debug(`[OnyxUpdateManager] Client is more up to date than the update received, skipping processing`); } else { // In cases where we received a previousUpdateID and it doesn't match our lastUpdateIDAppliedToClient From a2fcb38e15c6eedb195a21dbf500f88485398cc1 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Fri, 1 Sep 2023 11:25:14 +0530 Subject: [PATCH 094/315] fix image props for web --- src/components/Image/imagePropTypes.js | 28 +++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/components/Image/imagePropTypes.js b/src/components/Image/imagePropTypes.js index 3e9293bd2437..d363013886a8 100644 --- a/src/components/Image/imagePropTypes.js +++ b/src/components/Image/imagePropTypes.js @@ -1,20 +1,34 @@ import PropTypes from 'prop-types'; +import {Platform} from 'react-native'; import stylePropTypes from '../../styles/stylePropTypes'; import RESIZE_MODES from './resizeModes'; -const imagePropTypes = { - /** Styles for the Image */ - style: stylePropTypes, - - /** The static asset or URI source of the image */ - source: PropTypes.oneOfType([ +const sourceType = Platform.select({ + native: [ PropTypes.number, PropTypes.shape({ uri: PropTypes.string.isRequired, // eslint-disable-next-line react/forbid-prop-types headers: PropTypes.object, }), - ]).isRequired, + ], + default: [ + PropTypes.number, + PropTypes.shape({ + uri: PropTypes.string.isRequired, + // eslint-disable-next-line react/forbid-prop-types + headers: PropTypes.object, + }), + PropTypes.string, + ], +}); + +const imagePropTypes = { + /** Styles for the Image */ + style: stylePropTypes, + + /** The static asset or URI source of the image */ + source: PropTypes.oneOfType(sourceType).isRequired, /** Should an auth token be included in the image request */ isAuthTokenRequired: PropTypes.bool, From 7ff4630ef34ab368bd5f34f512a5d53025d25479 Mon Sep 17 00:00:00 2001 From: Bartosz Grajdek Date: Fri, 1 Sep 2023 14:48:31 +0200 Subject: [PATCH 095/315] [TS migration] Migrate 'isInputAutoFilled.js' lib to TypeScript --- src/libs/{isInputAutoFilled.js => isInputAutoFilled.ts} | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) rename src/libs/{isInputAutoFilled.js => isInputAutoFilled.ts} (66%) diff --git a/src/libs/isInputAutoFilled.js b/src/libs/isInputAutoFilled.ts similarity index 66% rename from src/libs/isInputAutoFilled.js rename to src/libs/isInputAutoFilled.ts index 8daa72484647..8d5f8e17308c 100644 --- a/src/libs/isInputAutoFilled.js +++ b/src/libs/isInputAutoFilled.ts @@ -2,11 +2,10 @@ import isSelectorSupported from './isSelectorSupported'; /** * Check the input is auto filled or not - * @param {Object} input - * @return {Boolean} + * @param input */ -export default function isInputAutoFilled(input) { - if (!input || !input.matches) return false; +export default function isInputAutoFilled(input: Element): boolean { + if (!input?.matches) return false; if (isSelectorSupported(':autofill')) { return input.matches(':-webkit-autofill') || input.matches(':autofill'); } From 63814f00d18a28484ac6bf92912df36a88e2b140 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Fri, 1 Sep 2023 19:55:13 +0530 Subject: [PATCH 096/315] change to platform file from select --- src/components/Image/imagePropTypes.js | 24 ++----------------- src/components/Image/sourcePropTypes/index.js | 11 +++++++++ .../Image/sourcePropTypes/index.native.js | 10 ++++++++ 3 files changed, 23 insertions(+), 22 deletions(-) create mode 100644 src/components/Image/sourcePropTypes/index.js create mode 100644 src/components/Image/sourcePropTypes/index.native.js diff --git a/src/components/Image/imagePropTypes.js b/src/components/Image/imagePropTypes.js index d363013886a8..c02e48eef659 100644 --- a/src/components/Image/imagePropTypes.js +++ b/src/components/Image/imagePropTypes.js @@ -1,34 +1,14 @@ import PropTypes from 'prop-types'; -import {Platform} from 'react-native'; import stylePropTypes from '../../styles/stylePropTypes'; +import sourcePropTypes from './sourcePropTypes'; import RESIZE_MODES from './resizeModes'; -const sourceType = Platform.select({ - native: [ - PropTypes.number, - PropTypes.shape({ - uri: PropTypes.string.isRequired, - // eslint-disable-next-line react/forbid-prop-types - headers: PropTypes.object, - }), - ], - default: [ - PropTypes.number, - PropTypes.shape({ - uri: PropTypes.string.isRequired, - // eslint-disable-next-line react/forbid-prop-types - headers: PropTypes.object, - }), - PropTypes.string, - ], -}); - const imagePropTypes = { /** Styles for the Image */ style: stylePropTypes, /** The static asset or URI source of the image */ - source: PropTypes.oneOfType(sourceType).isRequired, + source: sourcePropTypes.isRequired, /** Should an auth token be included in the image request */ isAuthTokenRequired: PropTypes.bool, diff --git a/src/components/Image/sourcePropTypes/index.js b/src/components/Image/sourcePropTypes/index.js new file mode 100644 index 000000000000..e33e2bef2188 --- /dev/null +++ b/src/components/Image/sourcePropTypes/index.js @@ -0,0 +1,11 @@ +import PropTypes from 'prop-types'; + +export default PropTypes.oneOfType([ + PropTypes.number, + PropTypes.shape({ + uri: PropTypes.string.isRequired, + // eslint-disable-next-line react/forbid-prop-types + headers: PropTypes.object, + }), + PropTypes.string, +]); \ No newline at end of file diff --git a/src/components/Image/sourcePropTypes/index.native.js b/src/components/Image/sourcePropTypes/index.native.js new file mode 100644 index 000000000000..0965d9ec2d72 --- /dev/null +++ b/src/components/Image/sourcePropTypes/index.native.js @@ -0,0 +1,10 @@ +import PropTypes from 'prop-types'; + +export default PropTypes.oneOfType([ + PropTypes.number, + PropTypes.shape({ + uri: PropTypes.string.isRequired, + // eslint-disable-next-line react/forbid-prop-types + headers: PropTypes.object, + }), +]); \ No newline at end of file From 1d60640a1a246c6499ed862cbbdc84113f8519ef Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Fri, 1 Sep 2023 19:58:05 +0530 Subject: [PATCH 097/315] run prettier --- src/components/Image/sourcePropTypes/index.js | 2 +- src/components/Image/sourcePropTypes/index.native.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Image/sourcePropTypes/index.js b/src/components/Image/sourcePropTypes/index.js index e33e2bef2188..99e88b5cf343 100644 --- a/src/components/Image/sourcePropTypes/index.js +++ b/src/components/Image/sourcePropTypes/index.js @@ -8,4 +8,4 @@ export default PropTypes.oneOfType([ headers: PropTypes.object, }), PropTypes.string, -]); \ No newline at end of file +]); diff --git a/src/components/Image/sourcePropTypes/index.native.js b/src/components/Image/sourcePropTypes/index.native.js index 0965d9ec2d72..e8aece2532d9 100644 --- a/src/components/Image/sourcePropTypes/index.native.js +++ b/src/components/Image/sourcePropTypes/index.native.js @@ -7,4 +7,4 @@ export default PropTypes.oneOfType([ // eslint-disable-next-line react/forbid-prop-types headers: PropTypes.object, }), -]); \ No newline at end of file +]); From b9f452fc2eb6a54f3fb16fe614a3e269f81b4210 Mon Sep 17 00:00:00 2001 From: Thanos30 Date: Fri, 1 Sep 2023 17:41:32 +0300 Subject: [PATCH 098/315] Emoji Suggestions Adjustments + Remove Duplicates --- src/libs/EmojiTrie.js | 43 ++++++++++++++++++++++++++++-------------- src/libs/EmojiUtils.js | 9 ++++++++- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/libs/EmojiTrie.js b/src/libs/EmojiTrie.js index c5448c340d81..3bebbf750628 100644 --- a/src/libs/EmojiTrie.js +++ b/src/libs/EmojiTrie.js @@ -18,26 +18,40 @@ function createTrie(lang = CONST.LOCALES.DEFAULT) { return; } - const name = isDefaultLocale ? item.name : _.get(langEmojis, [item.code, 'name']); - const names = isDefaultLocale ? [name] : [...new Set([name, item.name])]; - _.forEach(names, (nm) => { - const node = trie.search(nm); - if (!node) { - trie.add(nm, {code: item.code, types: item.types, name: nm, suggestions: []}); - } else { - trie.update(nm, {code: item.code, types: item.types, name: nm, suggestions: node.metaData.suggestions}); - } - }); - - const keywords = _.get(langEmojis, [item.code, 'keywords'], []).concat(isDefaultLocale ? [] : _.get(localeEmojis, [CONST.LOCALES.DEFAULT, item.code, 'keywords'], [])); + const defaultName = item.name; + const preferredLanguageName = _.get(langEmojis, [item.code, 'name'], defaultName); + + // Add the actual name of the emoji for the current language + const node = trie.search(preferredLanguageName); + if (!node) { + trie.add(preferredLanguageName, {code: item.code, types: item.types, name: preferredLanguageName, suggestions: []}); + } else { + trie.update(preferredLanguageName, {code: item.code, types: item.types, name: preferredLanguageName, suggestions: node.metaData.suggestions}); + } + + // Add keywords of both the current language and the default language, in case current language isn't the default. + const keywords = _.get(langEmojis, [item.code, 'keywords'], []).concat(isDefaultLocale ? [] : _.get(localeEmojis, [CONST.LOCALES.DEFAULT, item.code, 'keywords'], []));; for (let j = 0; j < keywords.length; j++) { const keywordNode = trie.search(keywords[j]); if (!keywordNode) { - trie.add(keywords[j], {suggestions: [{code: item.code, types: item.types, name}]}); + trie.add(keywords[j], {suggestions: [{code: item.code, types: item.types, name: preferredLanguageName}]}); } else { trie.update(keywords[j], { ...keywordNode.metaData, - suggestions: [...keywordNode.metaData.suggestions, {code: item.code, types: item.types, name}], + suggestions: [...keywordNode.metaData.suggestions, {code: item.code, types: item.types, name: preferredLanguageName}], + }); + } + } + + // If current language isn't the default, prepend the English name of the emoji in the suggestions as well. + if (!isDefaultLocale) { + const englishNode = trie.search(defaultName); + if (!englishNode) { + trie.add(defaultName, {suggestions: [{code: item.code, types: item.types, name: preferredLanguageName}]}); + } else { + trie.update(defaultName, { + ...englishNode.metaData, + suggestions: [{code: item.code, types: item.types, name: preferredLanguageName}, ...englishNode.metaData.suggestions], }); } } @@ -46,6 +60,7 @@ function createTrie(lang = CONST.LOCALES.DEFAULT) { return trie; } + const emojiTrie = _.reduce(supportedLanguages, (prev, cur) => ({...prev, [cur]: createTrie(cur)}), {}); Timing.end(CONST.TIMING.TRIE_INITIALIZATION); diff --git a/src/libs/EmojiUtils.js b/src/libs/EmojiUtils.js index df00418b7524..c8133023d80e 100644 --- a/src/libs/EmojiUtils.js +++ b/src/libs/EmojiUtils.js @@ -319,7 +319,14 @@ function replaceEmojis(text, preferredSkinTone = CONST.EMOJI_DEFAULT_SKIN_TONE, } for (let i = 0; i < emojiData.length; i++) { const name = emojiData[i].slice(1, -1); - const checkEmoji = trie.search(name); + let checkEmoji = trie.search(name); + if ((!checkEmoji || !checkEmoji.metaData.code) && lang !== CONST.LOCALES.DEFAULT) { + const englishTrie = emojisTrie[CONST.LOCALES.DEFAULT]; + if (englishTrie) { + const englishEmoji = englishTrie.search(name); + checkEmoji = englishEmoji; + } + } if (checkEmoji && checkEmoji.metaData.code) { let emojiReplacement = getEmojiCodeWithSkinColor(checkEmoji.metaData, preferredSkinTone); emojis.push({ From 5f744b7c293e3dcb0e022de61b5dcd04a6b9c8be Mon Sep 17 00:00:00 2001 From: Thanos30 Date: Fri, 1 Sep 2023 21:05:13 +0300 Subject: [PATCH 099/315] npm run prettier --- src/libs/EmojiTrie.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libs/EmojiTrie.js b/src/libs/EmojiTrie.js index 3bebbf750628..7f396e5188af 100644 --- a/src/libs/EmojiTrie.js +++ b/src/libs/EmojiTrie.js @@ -20,7 +20,7 @@ function createTrie(lang = CONST.LOCALES.DEFAULT) { const defaultName = item.name; const preferredLanguageName = _.get(langEmojis, [item.code, 'name'], defaultName); - + // Add the actual name of the emoji for the current language const node = trie.search(preferredLanguageName); if (!node) { @@ -28,9 +28,9 @@ function createTrie(lang = CONST.LOCALES.DEFAULT) { } else { trie.update(preferredLanguageName, {code: item.code, types: item.types, name: preferredLanguageName, suggestions: node.metaData.suggestions}); } - + // Add keywords of both the current language and the default language, in case current language isn't the default. - const keywords = _.get(langEmojis, [item.code, 'keywords'], []).concat(isDefaultLocale ? [] : _.get(localeEmojis, [CONST.LOCALES.DEFAULT, item.code, 'keywords'], []));; + const keywords = _.get(langEmojis, [item.code, 'keywords'], []).concat(isDefaultLocale ? [] : _.get(localeEmojis, [CONST.LOCALES.DEFAULT, item.code, 'keywords'], [])); for (let j = 0; j < keywords.length; j++) { const keywordNode = trie.search(keywords[j]); if (!keywordNode) { @@ -60,7 +60,6 @@ function createTrie(lang = CONST.LOCALES.DEFAULT) { return trie; } - const emojiTrie = _.reduce(supportedLanguages, (prev, cur) => ({...prev, [cur]: createTrie(cur)}), {}); Timing.end(CONST.TIMING.TRIE_INITIALIZATION); From 9cc67478fc26b0df9dc0fb40d3fa71314cab609e Mon Sep 17 00:00:00 2001 From: Anusha Date: Sat, 2 Sep 2023 10:02:35 +0500 Subject: [PATCH 100/315] temporary message disappears --- src/libs/ReportActionsUtils.js | 13 ++++++++++--- src/libs/ReportUtils.js | 1 + src/libs/actions/Report.js | 2 +- src/pages/home/report/ReportActionItem.js | 3 ++- src/pages/home/report/ReportActionItemFragment.js | 2 +- src/pages/home/report/ReportActionItemMessage.js | 2 +- 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/libs/ReportActionsUtils.js b/src/libs/ReportActionsUtils.js index 3ed10b865812..b81234d7c9b6 100644 --- a/src/libs/ReportActionsUtils.js +++ b/src/libs/ReportActionsUtils.js @@ -105,11 +105,18 @@ function isWhisperAction(action) { } /** + * + * Returns whether the comment is a thread parent message/the first message in a thread + * * @param {Object} reportAction + * @param {Number} reportID * @returns {Boolean} */ -function hasCommentThread(reportAction) { - return lodashGet(reportAction, 'childType', '') === CONST.REPORT.TYPE.CHAT && lodashGet(reportAction, 'childVisibleActionCount', 0) > 0; +function isThreadParentMessage(reportAction, reportID) { + return ( + lodashGet(reportAction, 'childType', '') === CONST.REPORT.TYPE.CHAT && + (lodashGet(reportAction, 'childVisibleActionCount', 0) > 0 || (!_.isUndefined(reportAction.childReportID) && reportAction.childReportID.toString() === reportID)) + ); } /** @@ -624,7 +631,7 @@ export { getLastClosedReportAction, getLatestReportActionFromOnyxData, isMoneyRequestAction, - hasCommentThread, + isThreadParentMessage, getLinkedTransactionID, getMostRecentReportActionLastModified, getReportPreviewAction, diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index ff9a5ee14519..df5c50f28522 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -1797,6 +1797,7 @@ function buildOptimisticAddCommentReportAction(text, file) { attachmentInfo, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, shouldShow: true, + childType: 'chat', }, }; } diff --git a/src/libs/actions/Report.js b/src/libs/actions/Report.js index 8b898a6aaaea..ad396b8bbaac 100644 --- a/src/libs/actions/Report.js +++ b/src/libs/actions/Report.js @@ -926,7 +926,7 @@ function deleteReportComment(reportID, reportAction) { html: '', text: '', isEdited: true, - isDeletedParentAction: ReportActionsUtils.hasCommentThread(reportAction), + isDeletedParentAction: ReportActionsUtils.isThreadParentMessage(reportAction, reportID), }, ]; const optimisticReportActions = { diff --git a/src/pages/home/report/ReportActionItem.js b/src/pages/home/report/ReportActionItem.js index d5d8b38bb92c..c2f14aba54ec 100644 --- a/src/pages/home/report/ReportActionItem.js +++ b/src/pages/home/report/ReportActionItem.js @@ -341,6 +341,7 @@ function ReportActionItem(props) { {!props.draftMessage ? ( ReportActions.clearReportActionErrors(props.report.reportID, props.action)} pendingAction={props.draftMessage ? null : props.action.pendingAction} - shouldHideOnDelete={!ReportActionsUtils.hasCommentThread(props.action)} + shouldHideOnDelete={!ReportActionsUtils.isThreadParentMessage(props.action, props.report.reportID)} errors={props.action.errors} errorRowStyles={[styles.ml10, styles.mr2]} needsOffscreenAlphaCompositing={ReportActionsUtils.isMoneyRequestAction(props.action)} diff --git a/src/pages/home/report/ReportActionItemFragment.js b/src/pages/home/report/ReportActionItemFragment.js index 91ee8f7531da..e6745a89e493 100644 --- a/src/pages/home/report/ReportActionItemFragment.js +++ b/src/pages/home/report/ReportActionItemFragment.js @@ -113,7 +113,7 @@ function ReportActionItemFragment(props) { // While offline we display the previous message with a strikethrough style. Once online we want to // immediately display "[Deleted message]" while the delete action is pending. - if ((!props.network.isOffline && props.hasCommentThread && props.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE) || props.fragment.isDeletedParentAction) { + if ((!props.network.isOffline && props.isThreadParentMessage && props.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE) || props.fragment.isDeletedParentAction) { return ${props.translate('parentReportAction.deletedMessage')}`} />; } diff --git a/src/pages/home/report/ReportActionItemMessage.js b/src/pages/home/report/ReportActionItemMessage.js index 40d2d5e6d89c..6e25702c821d 100644 --- a/src/pages/home/report/ReportActionItemMessage.js +++ b/src/pages/home/report/ReportActionItemMessage.js @@ -53,7 +53,7 @@ function ReportActionItemMessage(props) { fragment={fragment} isAttachment={props.action.isAttachment} iouMessage={iouMessage} - hasCommentThread={ReportActionsUtils.hasCommentThread(props.action)} + isThreadParentMessage={ReportActionsUtils.isThreadParentMessage(props.action, props.reportID)} attachmentInfo={props.action.attachmentInfo} pendingAction={props.action.pendingAction} source={lodashGet(props.action, 'originalMessage.source')} From 11a6db378e3a46195ae8fdd1c174c2fbdb1f4983 Mon Sep 17 00:00:00 2001 From: pradeepkumar Date: Mon, 4 Sep 2023 12:47:01 +0530 Subject: [PATCH 101/315] remove domain name --- src/libs/PersonalDetailsUtils.js | 3 ++- src/libs/actions/IOU.js | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libs/PersonalDetailsUtils.js b/src/libs/PersonalDetailsUtils.js index 1d4966826492..a83f9d1511f9 100644 --- a/src/libs/PersonalDetailsUtils.js +++ b/src/libs/PersonalDetailsUtils.js @@ -4,6 +4,7 @@ import _ from 'underscore'; import ONYXKEYS from '../ONYXKEYS'; import * as Localize from './Localize'; import * as UserUtils from './UserUtils'; +import * as LocalePhoneNumber from '../libs/LocalePhoneNumber'; let personalDetails = []; let allPersonalDetails = {}; @@ -115,7 +116,7 @@ function getNewPersonalDetailsOnyxData(logins, accountIDs) { login, accountID, avatar: UserUtils.getDefaultAvatarURL(accountID), - displayName: login, + displayName: LocalePhoneNumber.formatPhoneNumber(login), }; /** diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index b4f04174c1ac..857e9945bce7 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -459,8 +459,8 @@ function getMoneyRequestInformation( [payerAccountID]: { accountID: payerAccountID, avatar: UserUtils.getDefaultAvatarURL(payerAccountID), - displayName: participant.displayName || payerEmail, - login: participant.login, + displayName: participant.displayName || participant.login, + login: payerEmail, }, } : undefined; @@ -846,8 +846,8 @@ function createSplitsAndOnyxData(participants, currentUserLogin, currentUserAcco [accountID]: { accountID, avatar: UserUtils.getDefaultAvatarURL(accountID), - displayName: participant.displayName || email, - login: participant.login, + displayName: participant.displayName || participant.login, + login: email, }, } : undefined; From 6583102630ef89149ab79b533344638774293615 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Mon, 4 Sep 2023 12:53:40 +0530 Subject: [PATCH 102/315] correct props for ReportActionItemImage --- src/components/Image/index.native.js | 3 --- src/components/ReportActionItem/ReportActionItemImage.js | 8 +++++--- src/components/ReportActionItem/ReportActionItemImages.js | 3 ++- src/libs/ReceiptUtils.js | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/Image/index.native.js b/src/components/Image/index.native.js index 9d9ad600b1d4..2212fd13c283 100644 --- a/src/components/Image/index.native.js +++ b/src/components/Image/index.native.js @@ -18,9 +18,6 @@ function Image(props) { const {source, isAuthTokenRequired, session, ...rest} = props; let imageSource = source; - if (source && source.uri && typeof source.uri === 'number') { - imageSource = source.uri; - } if (typeof imageSource !== 'number' && isAuthTokenRequired) { const authToken = lodashGet(props, 'session.encryptedAuthToken', null); imageSource = { diff --git a/src/components/ReportActionItem/ReportActionItemImage.js b/src/components/ReportActionItem/ReportActionItemImage.js index 5f8444af0b21..ddfa41ce2a24 100644 --- a/src/components/ReportActionItem/ReportActionItemImage.js +++ b/src/components/ReportActionItem/ReportActionItemImage.js @@ -1,5 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; +import lodashGet from 'lodash/get'; import styles from '../../styles/styles'; import Image from '../Image'; import ThumbnailImage from '../ThumbnailImage'; @@ -10,13 +11,14 @@ import {ShowContextMenuContext} from '../ShowContextMenuContext'; import Navigation from '../../libs/Navigation/Navigation'; import PressableWithoutFocus from '../Pressable/PressableWithoutFocus'; import useLocalize from '../../hooks/useLocalize'; +import sourcePropTypes from '../Image/sourcePropTypes'; const propTypes = { /** thumbnail URI for the image */ thumbnail: PropTypes.string, /** URI for the image or local numeric reference for the image */ - image: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + image: sourcePropTypes.isRequired, /** whether or not to enable the image preview modal */ enablePreviewModal: PropTypes.bool, @@ -37,7 +39,7 @@ function ReportActionItemImage({thumbnail, image, enablePreviewModal}) { const {translate} = useLocalize(); if (thumbnail) { - const imageSource = tryResolveUrlFromApiRoot(image); + const imageSource = tryResolveUrlFromApiRoot(lodashGet(image, 'uri', image)); const thumbnailSource = tryResolveUrlFromApiRoot(thumbnail); const thumbnailComponent = ( ); diff --git a/src/components/ReportActionItem/ReportActionItemImages.js b/src/components/ReportActionItem/ReportActionItemImages.js index e9fed1ec289c..f599bac12d84 100644 --- a/src/components/ReportActionItem/ReportActionItemImages.js +++ b/src/components/ReportActionItem/ReportActionItemImages.js @@ -5,13 +5,14 @@ import _ from 'underscore'; import styles from '../../styles/styles'; import Text from '../Text'; import ReportActionItemImage from './ReportActionItemImage'; +import sourcePropTypes from '../Image/sourcePropTypes'; const propTypes = { /** array of image and thumbnail URIs */ images: PropTypes.arrayOf( PropTypes.shape({ thumbnail: PropTypes.string, - image: PropTypes.string, + image: sourcePropTypes, }), ).isRequired, diff --git a/src/libs/ReceiptUtils.js b/src/libs/ReceiptUtils.js index f7a53227d8d7..0b874827e3e7 100644 --- a/src/libs/ReceiptUtils.js +++ b/src/libs/ReceiptUtils.js @@ -42,11 +42,11 @@ function getThumbnailAndImageURIs(path, filename) { // For local files, we won't have a thumbnail yet if (isReceiptImage && (path.startsWith('blob:') || path.startsWith('file:'))) { - return {thumbnail: null, image: path}; + return {thumbnail: null, image: {uri: path}}; } if (isReceiptImage) { - return {thumbnail: `${path}.1024.jpg`, image: path}; + return {thumbnail: `${path}.1024.jpg`, image: {uri: path}}; } const {fileExtension} = FileUtils.splitExtensionFromFileName(filename); From 830aa864c843445f6a87c4693baa67d6a77c67e2 Mon Sep 17 00:00:00 2001 From: pradeepkumar Date: Mon, 4 Sep 2023 13:22:31 +0530 Subject: [PATCH 103/315] lint fix --- src/libs/PersonalDetailsUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/PersonalDetailsUtils.js b/src/libs/PersonalDetailsUtils.js index a83f9d1511f9..a401dea4b911 100644 --- a/src/libs/PersonalDetailsUtils.js +++ b/src/libs/PersonalDetailsUtils.js @@ -4,7 +4,7 @@ import _ from 'underscore'; import ONYXKEYS from '../ONYXKEYS'; import * as Localize from './Localize'; import * as UserUtils from './UserUtils'; -import * as LocalePhoneNumber from '../libs/LocalePhoneNumber'; +import * as LocalePhoneNumber from './LocalePhoneNumber'; let personalDetails = []; let allPersonalDetails = {}; From eb2ac251ce1e43fd9c8986994c3efcd81647f3b3 Mon Sep 17 00:00:00 2001 From: Bartosz Grajdek Date: Mon, 4 Sep 2023 09:59:29 +0200 Subject: [PATCH 104/315] [TS migration] Migrate 'Timers.js' lib to TypeScript --- src/libs/{Timers.js => Timers.ts} | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) rename src/libs/{Timers.js => Timers.ts} (73%) diff --git a/src/libs/Timers.js b/src/libs/Timers.ts similarity index 73% rename from src/libs/Timers.js rename to src/libs/Timers.ts index 49bc6a7350b8..e9fe474c4dc6 100644 --- a/src/libs/Timers.js +++ b/src/libs/Timers.ts @@ -1,14 +1,9 @@ -import _ from 'underscore'; - -const timers = []; +const timers: number[] = []; /** * Register a timer so it can be cleaned up later. - * - * @param {Number} timerID - * @returns {Number} */ -function register(timerID) { +function register(timerID: number): number { timers.push(timerID); return timerID; } @@ -16,8 +11,8 @@ function register(timerID) { /** * Clears all timers that we have registered. Use for long running tasks that may begin once logged out. */ -function clearAll() { - _.each(timers, (timer) => { +function clearAll(): void { + timers.forEach((timer) => { // We don't know whether it's a setTimeout or a setInterval, but it doesn't really matter. If the id doesn't // exist nothing bad happens. clearTimeout(timer); From 2cf9516f1d771acf01f877b4a448b0151971ba26 Mon Sep 17 00:00:00 2001 From: Bartosz Grajdek Date: Mon, 4 Sep 2023 10:13:51 +0200 Subject: [PATCH 105/315] [TS migration] Migrate 'RoomNameInputUtils.js' lib to TypeScript --- src/libs/{RoomNameInputUtils.js => RoomNameInputUtils.ts} | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) rename src/libs/{RoomNameInputUtils.js => RoomNameInputUtils.ts} (82%) diff --git a/src/libs/RoomNameInputUtils.js b/src/libs/RoomNameInputUtils.ts similarity index 82% rename from src/libs/RoomNameInputUtils.js rename to src/libs/RoomNameInputUtils.ts index 15b85f9f651a..2777acee45dd 100644 --- a/src/libs/RoomNameInputUtils.js +++ b/src/libs/RoomNameInputUtils.ts @@ -2,11 +2,8 @@ import CONST from '../CONST'; /** * Replaces spaces with dashes - * - * @param {String} roomName - * @returns {String} */ -function modifyRoomName(roomName) { +function modifyRoomName(roomName: string): string { const modifiedRoomNameWithoutHash = roomName .replace(/ /g, '-') From 6a13230f6a642186a6711ffa67924c7369a9a86d Mon Sep 17 00:00:00 2001 From: Bartosz Grajdek Date: Mon, 4 Sep 2023 11:59:56 +0200 Subject: [PATCH 106/315] ts migration googleplacesutils --- ...glePlacesUtils.js => GooglePlacesUtils.ts} | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) rename src/libs/{GooglePlacesUtils.js => GooglePlacesUtils.ts} (71%) diff --git a/src/libs/GooglePlacesUtils.js b/src/libs/GooglePlacesUtils.ts similarity index 71% rename from src/libs/GooglePlacesUtils.js rename to src/libs/GooglePlacesUtils.ts index 8723598264fb..fb44382cbe14 100644 --- a/src/libs/GooglePlacesUtils.js +++ b/src/libs/GooglePlacesUtils.ts @@ -1,5 +1,13 @@ import _ from 'underscore'; +type AddressComponent = { + // eslint-disable-next-line @typescript-eslint/naming-convention + long_name: string; + // eslint-disable-next-line @typescript-eslint/naming-convention + short_name: string; + types: string[]; +}; + /** * Finds an address component by type, and returns the value associated to key. Each address component object * inside the addressComponents array has the following structure: @@ -8,16 +16,12 @@ import _ from 'underscore'; * short_name: "New York", * types: [ "locality", "political" ] * }] - * - * @param {Array} addressComponents - * @param {Object} fieldsToExtract – has shape: {addressType: 'keyToUse'} - * @returns {Object} */ -function getAddressComponents(addressComponents, fieldsToExtract) { +function getAddressComponents(addressComponents: AddressComponent[], fieldsToExtract: Record) { const result = _.mapObject(fieldsToExtract, () => ''); - _.each(addressComponents, (addressComponent) => { - _.each(addressComponent.types, (addressType) => { - if (!_.has(fieldsToExtract, addressType) || !_.isEmpty(result[addressType])) { + addressComponents.forEach((addressComponent) => { + addressComponent.types.forEach((addressType) => { + if (!(addressType in fieldsToExtract) || addressType in result) { return; } const value = addressComponent[fieldsToExtract[addressType]] ? addressComponent[fieldsToExtract[addressType]] : ''; From 850a1ca8ba56a371e85707a146e12a9ed4056b8c Mon Sep 17 00:00:00 2001 From: Danut Gavrus Date: Mon, 4 Sep 2023 15:38:54 +0300 Subject: [PATCH 107/315] Updated sizes calculations. --- .../ReportActionItem/MoneyRequestPreview.js | 3 ++- src/styles/StyleUtils.js | 12 ++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js index f9dcfe55638f..9fd093724937 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview.js +++ b/src/components/ReportActionItem/MoneyRequestPreview.js @@ -32,6 +32,7 @@ import PressableWithFeedback from '../Pressable/PressableWithoutFeedback'; import * as ReceiptUtils from '../../libs/ReceiptUtils'; import ReportActionItemImages from './ReportActionItemImages'; import transactionPropTypes from '../transactionPropTypes'; +import * as StyleUtils from '../../styles/StyleUtils'; import colors from '../../styles/colors'; import variables from '../../styles/variables'; import useWindowDimensions from '../../hooks/useWindowDimensions'; @@ -267,7 +268,7 @@ function MoneyRequestPreview(props) { diff --git a/src/styles/StyleUtils.js b/src/styles/StyleUtils.js index 5a29cce9b622..9fe3fbd973b8 100644 --- a/src/styles/StyleUtils.js +++ b/src/styles/StyleUtils.js @@ -1347,26 +1347,22 @@ function getDropDownButtonHeight(buttonSize) { * @param {Number} baseLineHeight * @param {Boolean} isSmallScreenWidth * @param {Number} windowWidth - * @param {Number} requestAmount * @returns {Object} */ -function getAmountFontSizeAndLineHeight(baseFontSize, baseLineHeight, isSmallScreenWidth, windowWidth, requestAmount) { +function getAmountFontSizeAndLineHeight(baseFontSize, baseLineHeight, isSmallScreenWidth, windowWidth) { let toSubtract = 0; - // requestAmount also includes digits after ".", so "1,000,000.00" qualifies. - if (requestAmount >= 100000000) toSubtract = 2; - if (isSmallScreenWidth) { const widthDifference = variables.mobileResponsiveWidthBreakpoint - windowWidth; switch (true) { case widthDifference > 450: - toSubtract += 9; + toSubtract = 11; break; case widthDifference > 400: - toSubtract += 6; + toSubtract = 8; break; case widthDifference > 350: - toSubtract += 2; + toSubtract = 4; break; default: break; From 337aede449d782abf7125ec775616204b3d52f9e Mon Sep 17 00:00:00 2001 From: Nam Le Date: Mon, 4 Sep 2023 20:20:33 +0700 Subject: [PATCH 108/315] fix close message --- src/libs/actions/ReportActions.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libs/actions/ReportActions.js b/src/libs/actions/ReportActions.js index 55d81cb6eb14..d270876840ac 100644 --- a/src/libs/actions/ReportActions.js +++ b/src/libs/actions/ReportActions.js @@ -2,20 +2,23 @@ import Onyx from 'react-native-onyx'; import ONYXKEYS from '../../ONYXKEYS'; import CONST from '../../CONST'; import * as ReportActionUtils from '../ReportActionsUtils'; +import * as ReportUtils from '../ReportUtils'; /** * @param {String} reportID * @param {Object} reportAction */ function clearReportActionErrors(reportID, reportAction) { + const originalReportID = ReportUtils.getOriginalReportID(reportID, reportAction); + if (reportAction.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) { // Delete the optimistic action - Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, { + Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${originalReportID}`, { [reportAction.reportActionID]: null, }); // If there's a linked transaction, delete that too - const linkedTransactionID = ReportActionUtils.getLinkedTransactionID(reportID, reportAction.reportActionID); + const linkedTransactionID = ReportActionUtils.getLinkedTransactionID(originalReportID, reportAction.reportActionID); if (linkedTransactionID) { Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION}${linkedTransactionID}`, null); } @@ -23,7 +26,7 @@ function clearReportActionErrors(reportID, reportAction) { return; } - Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, { + Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${originalReportID}`, { [reportAction.reportActionID]: { errors: null, }, From 96cd5cea0d3831365d866ff3e852d0086d13bb13 Mon Sep 17 00:00:00 2001 From: laurenreidexpensify <62073721+laurenreidexpensify@users.noreply.github.com> Date: Mon, 4 Sep 2023 15:11:50 +0100 Subject: [PATCH 109/315] Update en.js --- src/languages/en.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/en.js b/src/languages/en.js index 364029a81ece..c51d204e4847 100755 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -902,7 +902,7 @@ export default { notHere: "Hmm... it's not here", pageNotFound: 'Oops, this page cannot be found', noAccess: "You don't have access to this chat", - goBackHome: 'Go back to Home page', + goBackHome: 'Go back to home page', }, setPasswordPage: { enterPassword: 'Enter a password', From df3752fc0d9c37cfe634054ad4af32112ec11642 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 4 Sep 2023 16:42:59 +0200 Subject: [PATCH 110/315] [TS migration] Migrate 'getSecureEntryKeyboardType' lib to TypeScript --- src/libs/getSecureEntryKeyboardType/index.android.js | 11 ----------- src/libs/getSecureEntryKeyboardType/index.android.ts | 11 +++++++++++ src/libs/getSecureEntryKeyboardType/index.js | 6 ------ src/libs/getSecureEntryKeyboardType/index.ts | 8 ++++++++ src/libs/getSecureEntryKeyboardType/types.ts | 3 +++ 5 files changed, 22 insertions(+), 17 deletions(-) delete mode 100644 src/libs/getSecureEntryKeyboardType/index.android.js create mode 100644 src/libs/getSecureEntryKeyboardType/index.android.ts delete mode 100644 src/libs/getSecureEntryKeyboardType/index.js create mode 100644 src/libs/getSecureEntryKeyboardType/index.ts create mode 100644 src/libs/getSecureEntryKeyboardType/types.ts diff --git a/src/libs/getSecureEntryKeyboardType/index.android.js b/src/libs/getSecureEntryKeyboardType/index.android.js deleted file mode 100644 index 03ba8f571fe9..000000000000 --- a/src/libs/getSecureEntryKeyboardType/index.android.js +++ /dev/null @@ -1,11 +0,0 @@ -import CONST from '../../CONST'; - -/** - * Return visible-password keyboard type when secure text is visible on Android, - * otherwise return keyboardType passed as function parameter - * @param {String} keyboardType - * @param {Boolean} secureTextEntry - * @param {Boolean} passwordHidden - * @return {String} - */ -export default (keyboardType, secureTextEntry, passwordHidden) => (secureTextEntry && !passwordHidden ? CONST.KEYBOARD_TYPE.VISIBLE_PASSWORD : keyboardType); diff --git a/src/libs/getSecureEntryKeyboardType/index.android.ts b/src/libs/getSecureEntryKeyboardType/index.android.ts new file mode 100644 index 000000000000..afd808f35b10 --- /dev/null +++ b/src/libs/getSecureEntryKeyboardType/index.android.ts @@ -0,0 +1,11 @@ +import CONST from '../../CONST'; +import GetSecureEntryKeyboardType from './types'; + +/** + * Return visible-password keyboard type when secure text is visible on Android, + * otherwise return keyboardType passed as function parameter + */ +const getSecureEntryKeyboardType: GetSecureEntryKeyboardType = (keyboardType, secureTextEntry, passwordHidden) => + secureTextEntry && !passwordHidden ? CONST.KEYBOARD_TYPE.VISIBLE_PASSWORD : keyboardType; + +export default getSecureEntryKeyboardType; diff --git a/src/libs/getSecureEntryKeyboardType/index.js b/src/libs/getSecureEntryKeyboardType/index.js deleted file mode 100644 index f6e2b9919b10..000000000000 --- a/src/libs/getSecureEntryKeyboardType/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Return keyboardType passed as function parameter on Web/Desktop/iOS - * @param {String} keyboardType - * @return {String} - */ -export default (keyboardType) => keyboardType; diff --git a/src/libs/getSecureEntryKeyboardType/index.ts b/src/libs/getSecureEntryKeyboardType/index.ts new file mode 100644 index 000000000000..030a88e60e84 --- /dev/null +++ b/src/libs/getSecureEntryKeyboardType/index.ts @@ -0,0 +1,8 @@ +import GetSecureEntryKeyboardType from './types'; + +/** + * Return keyboardType passed as function parameter on Web/Desktop/iOS + */ +const getSecureEntryKeyboardType: GetSecureEntryKeyboardType = (keyboardType) => keyboardType; + +export default getSecureEntryKeyboardType; diff --git a/src/libs/getSecureEntryKeyboardType/types.ts b/src/libs/getSecureEntryKeyboardType/types.ts new file mode 100644 index 000000000000..fe79440e3109 --- /dev/null +++ b/src/libs/getSecureEntryKeyboardType/types.ts @@ -0,0 +1,3 @@ +type GetSecureEntryKeyboardType = (keyboardType: string, secureTextEntry: boolean, passwordHidden: boolean) => string; + +export default GetSecureEntryKeyboardType; From 293d0739d11e4025a40748dca51323a0e695893b Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 4 Sep 2023 16:47:40 +0200 Subject: [PATCH 111/315] [TS migration] Migrate 'canFocusInputOnScreenFocus' lib to TypeScript --- src/libs/canFocusInputOnScreenFocus/index.js | 3 --- src/libs/canFocusInputOnScreenFocus/index.native.js | 1 - src/libs/canFocusInputOnScreenFocus/index.native.ts | 5 +++++ src/libs/canFocusInputOnScreenFocus/index.ts | 6 ++++++ src/libs/canFocusInputOnScreenFocus/types.ts | 3 +++ 5 files changed, 14 insertions(+), 4 deletions(-) delete mode 100644 src/libs/canFocusInputOnScreenFocus/index.js delete mode 100644 src/libs/canFocusInputOnScreenFocus/index.native.js create mode 100644 src/libs/canFocusInputOnScreenFocus/index.native.ts create mode 100644 src/libs/canFocusInputOnScreenFocus/index.ts create mode 100644 src/libs/canFocusInputOnScreenFocus/types.ts diff --git a/src/libs/canFocusInputOnScreenFocus/index.js b/src/libs/canFocusInputOnScreenFocus/index.js deleted file mode 100644 index c930c0d944ec..000000000000 --- a/src/libs/canFocusInputOnScreenFocus/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import * as DeviceCapabilities from '../DeviceCapabilities'; - -export default () => !DeviceCapabilities.canUseTouchScreen(); diff --git a/src/libs/canFocusInputOnScreenFocus/index.native.js b/src/libs/canFocusInputOnScreenFocus/index.native.js deleted file mode 100644 index eae5767cffbc..000000000000 --- a/src/libs/canFocusInputOnScreenFocus/index.native.js +++ /dev/null @@ -1 +0,0 @@ -export default () => false; diff --git a/src/libs/canFocusInputOnScreenFocus/index.native.ts b/src/libs/canFocusInputOnScreenFocus/index.native.ts new file mode 100644 index 000000000000..79d711c49fa6 --- /dev/null +++ b/src/libs/canFocusInputOnScreenFocus/index.native.ts @@ -0,0 +1,5 @@ +import CanFocusInputOnScreenFocus from './types'; + +const canFocusInputOnScreenFocus: CanFocusInputOnScreenFocus = () => false; + +export default canFocusInputOnScreenFocus; diff --git a/src/libs/canFocusInputOnScreenFocus/index.ts b/src/libs/canFocusInputOnScreenFocus/index.ts new file mode 100644 index 000000000000..be500074d7e3 --- /dev/null +++ b/src/libs/canFocusInputOnScreenFocus/index.ts @@ -0,0 +1,6 @@ +import * as DeviceCapabilities from '../DeviceCapabilities'; +import CanFocusInputOnScreenFocus from './types'; + +const canFocusInputOnScreenFocus: CanFocusInputOnScreenFocus = () => !DeviceCapabilities.canUseTouchScreen(); + +export default canFocusInputOnScreenFocus; diff --git a/src/libs/canFocusInputOnScreenFocus/types.ts b/src/libs/canFocusInputOnScreenFocus/types.ts new file mode 100644 index 000000000000..5a65e5e7d198 --- /dev/null +++ b/src/libs/canFocusInputOnScreenFocus/types.ts @@ -0,0 +1,3 @@ +type CanFocusInputOnScreenFocus = () => boolean; + +export default CanFocusInputOnScreenFocus; From 6f7f4e5cf6e403c57e18bca5ad4612cb553576a6 Mon Sep 17 00:00:00 2001 From: Wildan Muhlis Date: Mon, 4 Sep 2023 21:50:02 +0700 Subject: [PATCH 112/315] disable debounce --- src/components/Hoverable/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Hoverable/index.js b/src/components/Hoverable/index.js index 634b91197eb5..d1a884518055 100644 --- a/src/components/Hoverable/index.js +++ b/src/components/Hoverable/index.js @@ -13,7 +13,8 @@ class Hoverable extends Component { super(props); this.handleVisibilityChange = this.handleVisibilityChange.bind(this); - this.checkHover = _.debounce(this.checkHover.bind(this), 100); + // this.checkHover = _.debounce(this.checkHover.bind(this), 100); + this.checkHover = this.checkHover.bind(this); this.state = { isHovered: false, From 39a1074ba34a59b5c9fa79f086035b8a4d911143 Mon Sep 17 00:00:00 2001 From: Anusha Date: Mon, 4 Sep 2023 19:45:43 +0500 Subject: [PATCH 113/315] set optimistic childType --- src/libs/ReportUtils.js | 1 - src/libs/actions/Report.js | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js index 5778450ba571..893145a8e5fa 100644 --- a/src/libs/ReportUtils.js +++ b/src/libs/ReportUtils.js @@ -1805,7 +1805,6 @@ function buildOptimisticAddCommentReportAction(text, file) { attachmentInfo, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, shouldShow: true, - childType: 'chat', }, }; } diff --git a/src/libs/actions/Report.js b/src/libs/actions/Report.js index ad396b8bbaac..c4c9b2bfcb4f 100644 --- a/src/libs/actions/Report.js +++ b/src/libs/actions/Report.js @@ -528,12 +528,12 @@ function openReport(reportID, participantLoginList = [], newReportObject = {}, p onyxData.optimisticData.push({ onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${newReportObject.parentReportID}`, - value: {[parentReportActionID]: {childReportID: reportID}}, + value: {[parentReportActionID]: {childReportID: reportID, childType: CONST.REPORT.TYPE.CHAT}}, }); onyxData.failureData.push({ onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${newReportObject.parentReportID}`, - value: {[parentReportActionID]: {childReportID: '0'}}, + value: {[parentReportActionID]: {childReportID: '0', childType: ''}}, }); } } From ba5dc0d570b78d31f598a8bce053185f8c3a3a70 Mon Sep 17 00:00:00 2001 From: Wildan Muhlis Date: Mon, 4 Sep 2023 22:10:59 +0700 Subject: [PATCH 114/315] Add comment to checkHover function --- src/components/Hoverable/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/Hoverable/index.js b/src/components/Hoverable/index.js index d1a884518055..7353416b33c2 100644 --- a/src/components/Hoverable/index.js +++ b/src/components/Hoverable/index.js @@ -13,7 +13,6 @@ class Hoverable extends Component { super(props); this.handleVisibilityChange = this.handleVisibilityChange.bind(this); - // this.checkHover = _.debounce(this.checkHover.bind(this), 100); this.checkHover = this.checkHover.bind(this); this.state = { @@ -66,6 +65,12 @@ class Hoverable extends Component { this.setIsHovered(false); } + /** + * Checks the hover state of a component and updates it based on the event target. + * This is necessary to handle cases where the hover state might get stuck due to an unreliable mouseleave trigger, + * such as when an element is removed before the mouseleave event is triggered. + * @param {Event} e - The hover event object. + */ checkHover = (e) => { if (!this.wrapperView || !this.state.isHovered) { return; From cd3787ae28a37f9e9a4910f524022189f1659e0c Mon Sep 17 00:00:00 2001 From: Pujan Date: Mon, 4 Sep 2023 21:30:54 +0530 Subject: [PATCH 115/315] overlay content changes for lounge access page --- src/components/IllustratedHeaderPageLayout.js | 7 +- .../settings/Profile/LoungeAccessPage.js | 70 +++++++++++++++++-- 2 files changed, 69 insertions(+), 8 deletions(-) diff --git a/src/components/IllustratedHeaderPageLayout.js b/src/components/IllustratedHeaderPageLayout.js index d1403bd4029e..be4cb12d935e 100644 --- a/src/components/IllustratedHeaderPageLayout.js +++ b/src/components/IllustratedHeaderPageLayout.js @@ -27,14 +27,18 @@ const propTypes = { /** A fixed footer to display at the bottom of the page. */ footer: PropTypes.node, + + /** Overlay content to display on top of animation */ + overlayContent: PropTypes.func, }; const defaultProps = { backgroundColor: themeColors.appBG, footer: null, + overlayContent: null, }; -function IllustratedHeaderPageLayout({backgroundColor, children, illustration, footer, ...propsToPassToHeader}) { +function IllustratedHeaderPageLayout({backgroundColor, children, illustration, footer, overlayContent, ...propsToPassToHeader}) { const {windowHeight} = useWindowDimensions(); const {isOffline} = useNetwork(); return ( @@ -65,6 +69,7 @@ function IllustratedHeaderPageLayout({backgroundColor, children, illustration, f autoPlay loop /> + {overlayContent && overlayContent()} {children} diff --git a/src/pages/settings/Profile/LoungeAccessPage.js b/src/pages/settings/Profile/LoungeAccessPage.js index 36bb692598fc..ede8faa64cd4 100644 --- a/src/pages/settings/Profile/LoungeAccessPage.js +++ b/src/pages/settings/Profile/LoungeAccessPage.js @@ -1,5 +1,7 @@ import React from 'react'; +import { View } from 'react-native'; import {withOnyx} from 'react-native-onyx'; +import PropTypes from 'prop-types'; import Navigation from '../../../libs/Navigation/Navigation'; import ROUTES from '../../../ROUTES'; import * as Illustrations from '../../../components/Icon/Illustrations'; @@ -10,14 +12,36 @@ import useLocalize from '../../../hooks/useLocalize'; import FeatureList from '../../../components/FeatureList'; import IllustratedHeaderPageLayout from '../../../components/IllustratedHeaderPageLayout'; import * as LottieAnimations from '../../../components/LottieAnimations'; +import compose from '../../../libs/compose'; +import withCurrentUserPersonalDetails, {withCurrentUserPersonalDetailsDefaultProps, withCurrentUserPersonalDetailsPropTypes} from '../../../components/withCurrentUserPersonalDetails'; +import LinearGradient from '../../../components/LinearGradient'; +import styles from '../../../styles/styles'; +import Avatar from '../../../components/Avatar'; +import Text from '../../../components/Text'; +import * as UserUtils from '../../../libs/UserUtils'; +import CONST from '../../../CONST'; +import withLocalize, {withLocalizePropTypes} from '../../../components/withLocalize'; +import themeColors from '../../../styles/themes/default'; const propTypes = { + + /** The session of the logged in person */ + session: PropTypes.shape({ + /** Email of the logged in person */ + email: PropTypes.string, + }), + /** Current user details, which will hold whether or not they have Lounge Access */ user: userPropTypes, + + ...withLocalizePropTypes, + ...withCurrentUserPersonalDetailsPropTypes, }; const defaultProps = { + session: {}, user: {}, + ...withCurrentUserPersonalDetailsDefaultProps, }; const menuItems = [ @@ -35,18 +59,43 @@ const menuItems = [ }, ]; -function LoungeAccessPage({user}) { +function LoungeAccessPage(props) { const {translate} = useLocalize(); - if (!user.hasLoungeAccess) { + if (!props.user.hasLoungeAccess) { return ; } + + const overlayContent = () => ( + + + + + {props.currentUserPersonalDetails.displayName ? props.currentUserPersonalDetails.displayName : props.formatPhoneNumber(props.session.email)} + + + {props.formatPhoneNumber(props.session.email)} + + + + ); return ( Navigation.goBack(ROUTES.SETTINGS)} illustration={LottieAnimations.ExpensifyLounge} + overlayContent={overlayContent} > Date: Mon, 4 Sep 2023 21:48:59 +0530 Subject: [PATCH 116/315] lint fix --- src/pages/settings/Profile/LoungeAccessPage.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pages/settings/Profile/LoungeAccessPage.js b/src/pages/settings/Profile/LoungeAccessPage.js index ede8faa64cd4..9c54cf1aec18 100644 --- a/src/pages/settings/Profile/LoungeAccessPage.js +++ b/src/pages/settings/Profile/LoungeAccessPage.js @@ -1,5 +1,5 @@ import React from 'react'; -import { View } from 'react-native'; +import {View} from 'react-native'; import {withOnyx} from 'react-native-onyx'; import PropTypes from 'prop-types'; import Navigation from '../../../libs/Navigation/Navigation'; @@ -24,7 +24,6 @@ import withLocalize, {withLocalizePropTypes} from '../../../components/withLocal import themeColors from '../../../styles/themes/default'; const propTypes = { - /** The session of the logged in person */ session: PropTypes.shape({ /** Email of the logged in person */ @@ -65,9 +64,12 @@ function LoungeAccessPage(props) { if (!props.user.hasLoungeAccess) { return ; } - + const overlayContent = () => ( - + Date: Mon, 4 Sep 2023 23:41:27 +0500 Subject: [PATCH 117/315] fix: sort valid waypoints --- src/libs/TransactionUtils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/TransactionUtils.js b/src/libs/TransactionUtils.js index b99c44abad90..7c288144aa0b 100644 --- a/src/libs/TransactionUtils.js +++ b/src/libs/TransactionUtils.js @@ -309,7 +309,8 @@ function waypointHasValidAddress(waypoint) { * @returns {Object} validated waypoints */ function getValidWaypoints(waypoints, reArrangeIndexes = false) { - const waypointValues = _.values(waypoints); + const sortedIndexes = _.map(waypoints, (_, key) => parseInt(key.replace('waypoint', ''), 10)).sort(); + const waypointValues = _.map(sortedIndexes, (index) => waypoints[`waypoint${index}`]); // Ensure the number of waypoints is between 2 and 25 if (waypointValues.length < 2 || waypointValues.length > 25) { return {}; @@ -339,7 +340,6 @@ function getValidWaypoints(waypoints, reArrangeIndexes = false) { }, {}, ); - return validWaypoints; } From 1fb4677c3f90451e29e83b574fc21bc42ac18051 Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Mon, 4 Sep 2023 23:55:04 +0500 Subject: [PATCH 118/315] lint errors --- src/libs/TransactionUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/TransactionUtils.js b/src/libs/TransactionUtils.js index 7c288144aa0b..4a686733925e 100644 --- a/src/libs/TransactionUtils.js +++ b/src/libs/TransactionUtils.js @@ -309,7 +309,7 @@ function waypointHasValidAddress(waypoint) { * @returns {Object} validated waypoints */ function getValidWaypoints(waypoints, reArrangeIndexes = false) { - const sortedIndexes = _.map(waypoints, (_, key) => parseInt(key.replace('waypoint', ''), 10)).sort(); + const sortedIndexes = _.map(_.keys(waypoints), (key) => parseInt(key.replace('waypoint', ''), 10)).sort(); const waypointValues = _.map(sortedIndexes, (index) => waypoints[`waypoint${index}`]); // Ensure the number of waypoints is between 2 and 25 if (waypointValues.length < 2 || waypointValues.length > 25) { From 26ca7fa21c7dc18ea28bc3e04830f63899470a0f Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Tue, 5 Sep 2023 00:29:39 +0500 Subject: [PATCH 119/315] fix: disable button on error --- src/components/DistanceRequest.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/DistanceRequest.js b/src/components/DistanceRequest.js index f3b1dcd94cf9..a1e84fbefead 100644 --- a/src/components/DistanceRequest.js +++ b/src/components/DistanceRequest.js @@ -90,7 +90,7 @@ function DistanceRequest({iou, iouType, report, transaction, mapboxAccessToken}) const lastWaypointIndex = numberOfWaypoints - 1; const isLoadingRoute = lodashGet(transaction, 'comment.isLoading', false); - const hasRouteError = lodashHas(transaction, 'errorFields.route'); + const hasRouteError = !!lodashGet(transaction, 'errorFields.route'); const haveWaypointsChanged = !_.isEqual(previousWaypoints, waypoints); const doesRouteExist = lodashHas(transaction, 'routes.route0.geometry.coordinates'); const validatedWaypoints = TransactionUtils.getValidWaypoints(waypoints); @@ -263,7 +263,7 @@ function DistanceRequest({iou, iouType, report, transaction, mapboxAccessToken}) success style={[styles.w100, styles.mb4, styles.ph4, styles.flexShrink0]} onPress={() => IOU.navigateToNextPage(iou, iouType, reportID, report)} - isDisabled={_.size(validatedWaypoints) < 2} + isDisabled={_.size(validatedWaypoints) < 2 || hasRouteError} text={translate('common.next')} /> From 2c35279607b417cfdcbd7305b8c45250c73a3610 Mon Sep 17 00:00:00 2001 From: Wildan Muhlis Date: Tue, 5 Sep 2023 05:58:07 +0700 Subject: [PATCH 120/315] resolve no-invalid-this lint error --- src/components/Hoverable/index.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/Hoverable/index.js b/src/components/Hoverable/index.js index 7353416b33c2..7b105833157a 100644 --- a/src/components/Hoverable/index.js +++ b/src/components/Hoverable/index.js @@ -57,21 +57,13 @@ class Hoverable extends Component { } } - handleVisibilityChange() { - if (document.visibilityState !== 'hidden') { - return; - } - - this.setIsHovered(false); - } - /** * Checks the hover state of a component and updates it based on the event target. * This is necessary to handle cases where the hover state might get stuck due to an unreliable mouseleave trigger, * such as when an element is removed before the mouseleave event is triggered. * @param {Event} e - The hover event object. */ - checkHover = (e) => { + checkHover(e) { if (!this.wrapperView || !this.state.isHovered) { return; } @@ -83,6 +75,14 @@ class Hoverable extends Component { this.setIsHovered(false); }; + handleVisibilityChange() { + if (document.visibilityState !== 'hidden') { + return; + } + + this.setIsHovered(false); + } + render() { let child = this.props.children; if (_.isArray(this.props.children) && this.props.children.length === 1) { From 64ac6e2efd4769b7820c56c4fb55843b08871651 Mon Sep 17 00:00:00 2001 From: Wildan Muhlis Date: Tue, 5 Sep 2023 06:13:32 +0700 Subject: [PATCH 121/315] run prettier --- src/components/Hoverable/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Hoverable/index.js b/src/components/Hoverable/index.js index 7b105833157a..0b560703a069 100644 --- a/src/components/Hoverable/index.js +++ b/src/components/Hoverable/index.js @@ -73,7 +73,7 @@ class Hoverable extends Component { } this.setIsHovered(false); - }; + } handleVisibilityChange() { if (document.visibilityState !== 'hidden') { From 5005161e0a4cbb0fa9e6afb693fa0690cac994c7 Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Tue, 5 Sep 2023 10:23:14 +0700 Subject: [PATCH 122/315] update reportAction for context menu --- .eslintrc.js | 8 + .../actions/composite/setupNode/action.yml | 4 +- .../javascript/authorChecklist/index.js | 3648 +++-- .../javascript/awaitStagingDeploys/index.js | 3650 +++-- .../actions/javascript/bumpVersion/index.js | 2712 ++-- .../javascript/checkDeployBlockers/index.js | 3650 +++-- .../createOrUpdateStagingDeploy.js | 241 +- .../createOrUpdateStagingDeploy/index.js | 3653 +++-- .../getDeployPullRequestList/index.js | 3660 +++-- .../javascript/getPreviousVersion/index.js | 2712 ++-- .../javascript/getPullRequestDetails/index.js | 3650 +++-- .../getReleaseBody/getReleaseBody.js | 3 +- .../javascript/getReleaseBody/index.js | 3651 +++-- .../javascript/isStagingDeployLocked/index.js | 3650 +++-- .../markPullRequestsAsDeployed/index.js | 3476 ++-- .../markPullRequestsAsDeployed.js | 198 +- .../javascript/postTestBuildComment/index.js | 3648 +++-- .../reopenIssueWithComment/index.js | 3648 +++-- .../javascript/reviewerChecklist/index.js | 3648 +++-- .../javascript/verifySignedCommits/index.js | 3650 +++-- .github/libs/GitUtils.js | 6 +- .github/libs/GithubUtils.js | 2 +- .github/workflows/README.md | 5 + .github/workflows/cherryPick.yml | 2 + .github/workflows/deployExpensifyHelp.yml | 6 +- .github/workflows/e2ePerformanceTests.yml | 6 + .github/workflows/platformDeploy.yml | 8 +- .github/workflows/test.yml | 2 + .github/workflows/testBuild.yml | 8 + .github/workflows/verifyPodfile.yml | 2 + .storybook/preview.js | 10 +- README.md | 5 +- __mocks__/react-native.js | 8 +- android/app/build.gradle | 8 +- .../res/drawable/ic_launcher_foreground.xml | 37 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 4 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 4 +- .../src/adhoc/res/mipmap-hdpi/ic_launcher.png | Bin 3991 -> 4471 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 5861 -> 4471 bytes .../src/adhoc/res/mipmap-ldpi/ic_launcher.png | Bin 1748 -> 0 bytes .../src/adhoc/res/mipmap-mdpi/ic_launcher.png | Bin 2305 -> 2847 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3513 -> 2847 bytes .../adhoc/res/mipmap-xhdpi/ic_launcher.png | Bin 5571 -> 6370 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 8316 -> 6370 bytes .../adhoc/res/mipmap-xxhdpi/ic_launcher.png | Bin 9750 -> 10152 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 14266 -> 10152 bytes .../adhoc/res/mipmap-xxxhdpi/ic_launcher.png | Bin 14056 -> 14589 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 20273 -> 14589 bytes .../res/values/ic_launcher_background.xml | 4 +- .../res/drawable/ic_launcher_foreground.xml | 37 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 4 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 4 +- .../res/mipmap-hdpi/ic_launcher.png | Bin 4021 -> 4470 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 5488 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 5865 -> 4470 bytes .../res/mipmap-ldpi/ic_launcher.png | Bin 1753 -> 0 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 2315 -> 2851 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 3473 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3527 -> 2851 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 5615 -> 6331 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 7728 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 8229 -> 6331 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 9694 -> 10090 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 12716 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 14248 -> 10090 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 14033 -> 14441 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 17700 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 20206 -> 14441 bytes .../res/values/ic_launcher_background.xml | 4 +- android/app/src/main/AndroidManifest.xml | 2 +- .../res/drawable/ic_launcher_foreground.xml | 31 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 4 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 4 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4492 -> 4142 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 2604 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4492 -> 4142 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2842 -> 2716 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 1608 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2842 -> 2716 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 6289 -> 6010 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 3633 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 6289 -> 6010 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 9772 -> 9490 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 5745 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 9772 -> 9490 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13606 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 8283 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 13606 bytes .../res/values/ic_launcher_background.xml | 4 +- android/build.gradle | 24 +- assets/animations/SaveTheWorld.json | 1 + assets/emojis/index.js | 9 +- assets/images/emptystate__routepending.svg | 43 + assets/images/expensify-app-icon.svg | 18 + assets/images/heart.svg | 7 + assets/images/lounge-access.svg | 23 - assets/images/new-expensify-dev.svg | 4 +- assets/images/signIn/apple-logo.svg | 4 + assets/images/signIn/google-logo.svg | 14 + .../simple-illustration__email-address.svg | 35 + config/webpack/webpack.common.js | 2 +- config/webpack/webpack.dev.js | 1 + contributingGuides/APPLE_GOOGLE_SIGNIN.md | 272 + contributingGuides/CONTRIBUTING.md | 6 +- .../PROPTYPES_CONVERSION_TABLE.md | 4 +- contributingGuides/TS_STYLE.md | 59 +- desktop/main.js | 2 +- ...e share for ExpensifyApproved!-partners.md | 22 + docs/_layouts/default.html | 17 +- docs/_sass/_colors.scss | 3 + docs/_sass/_main.scss | 4 +- docs/_sass/_search-bar.scss | 75 +- .../other/Enable-Location-Access-on-Web.md | 55 + .../other/Expensify-Chat-For-Admins.md | 26 + ...Expensify-Chat-For-Conference-Attendees.md | 35 + .../Expensify-Chat-For-Conference-Speakers.md | 39 + docs/articles/other/Insights.md | 100 + ...Expensify-Chat-Playbook-for-Conferences.md | 124 +- ...ok-for-Small-to-Medium-Sized-Businesses.md | 2 +- .../request-money/Request-and-Split-Bills.md | 5 +- docs/assets/images/insights-chart.png | Bin 0 -> 201605 bytes docs/assets/js/main.js | 35 +- docs/context.xml | 2 +- fastlane/Fastfile | 3 +- ios/NewExpensify.xcodeproj/project.pbxproj | 24 + .../xcschemes/New Expensify.xcscheme | 3 +- ios/NewExpensify/Chat.entitlements | 4 + .../AppIcon.appiconset/Contents.json | 12 + .../AppIcon.appiconset/notification.png | Bin 0 -> 656 bytes .../AppIcon.appiconset/notification@2x 1.png | Bin 0 -> 1258 bytes .../AppIcon.appiconset/notification@2x.png | Bin 0 -> 1258 bytes .../AppIcon.appiconset/notification@3x.png | Bin 0 -> 1806 bytes .../AppIcon.appiconset/settings.png | Bin 0 -> 937 bytes .../AppIcon.appiconset/settings@2x 1.png | Bin 0 -> 1752 bytes .../AppIcon.appiconset/settings@2x.png | Bin 0 -> 1752 bytes .../AppIcon.appiconset/settings@3x.png | Bin 0 -> 2578 bytes .../AppIcon.appiconset/spotlight.png | Bin 0 -> 1258 bytes .../AppIcon.appiconset/spotlight@2x 1.png | Bin 0 -> 2446 bytes .../AppIcon.appiconset/spotlight@2x.png | Bin 0 -> 2446 bytes .../AppIcon.appiconset/spotlight@3x.png | Bin 0 -> 3562 bytes .../AppIconAdHoc.appiconset/ADHOC_Store.png | Bin 0 -> 27975 bytes .../AppIconAdHoc.appiconset/ADHOC_iPadApp.png | Bin 0 -> 2667 bytes .../ADHOC_iPadApp@2x.png | Bin 0 -> 5720 bytes .../ADHOC_iPadPro@2x.png | Bin 0 -> 6242 bytes .../ADHOC_iPhoneApp@2x 1.png | Bin 0 -> 4368 bytes .../ADHOC_iPhoneApp@2x.png | Bin 0 -> 4368 bytes .../ADHOC_iPhoneApp@3x 1.png | Bin 0 -> 6909 bytes .../ADHOC_iPhoneApp@3x.png | Bin 0 -> 6909 bytes .../ADHOC_notification.png | Bin 0 -> 705 bytes .../ADHOC_notification@2x 1.png | Bin 0 -> 1423 bytes .../ADHOC_notification@2x.png | Bin 0 -> 1423 bytes .../ADHOC_notification@3x.png | Bin 0 -> 2068 bytes .../ADHOC_settings 1.png | Bin 0 -> 1017 bytes .../ADHOC_settings.png | Bin 0 -> 1017 bytes .../ADHOC_settings@2x 1.png | Bin 0 -> 2011 bytes .../ADHOC_settings@2x.png | Bin 0 -> 2011 bytes .../ADHOC_settings@3x.png | Bin 0 -> 3043 bytes .../ADHOC_spotlight.png | Bin 0 -> 1423 bytes .../ADHOC_spotlight@2x 1.png | Bin 0 -> 2937 bytes .../ADHOC_spotlight@2x.png | Bin 0 -> 2937 bytes .../ADHOC_spotlight@3x.png | Bin 0 -> 4368 bytes .../AppIconAdHoc.appiconset/AppIcon-20@2x.png | Bin 1368 -> 0 bytes .../AppIcon-20@2x~ipad.png | Bin 1368 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon-20@3x.png | Bin 2197 -> 0 bytes .../AppIcon-20~ipad.png | Bin 650 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon-29.png | Bin 990 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon-29@2x.png | Bin 2110 -> 0 bytes .../AppIcon-29@2x~ipad.png | Bin 2110 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon-29@3x.png | Bin 3052 -> 0 bytes .../AppIcon-29~ipad.png | Bin 990 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon-40@2x.png | Bin 2899 -> 0 bytes .../AppIcon-40@2x~ipad.png | Bin 2899 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon-40@3x.png | Bin 4457 -> 0 bytes .../AppIcon-40~ipad.png | Bin 1368 -> 0 bytes .../AppIcon-60@2x~car.png | Bin 4457 -> 0 bytes .../AppIcon-60@3x~car.png | Bin 6977 -> 0 bytes .../AppIcon-83.5@2x~ipad.png | Bin 6154 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon@2x.png | Bin 4457 -> 0 bytes .../AppIcon@2x~ipad.png | Bin 5769 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon@3x.png | Bin 6977 -> 0 bytes .../AppIcon~ios-marketing.png | Bin 64433 -> 0 bytes .../AppIconAdHoc.appiconset/AppIcon~ipad.png | Bin 2722 -> 0 bytes .../AppIconAdHoc.appiconset/Contents.json | 178 +- .../AppIconDev.appiconset/AppIcon-20@2x.png | Bin 1368 -> 0 bytes .../AppIcon-20@2x~ipad.png | Bin 1368 -> 0 bytes .../AppIconDev.appiconset/AppIcon-20@3x.png | Bin 2199 -> 0 bytes .../AppIconDev.appiconset/AppIcon-20~ipad.png | Bin 646 -> 0 bytes .../AppIconDev.appiconset/AppIcon-29.png | Bin 1007 -> 0 bytes .../AppIconDev.appiconset/AppIcon-29@2x.png | Bin 2133 -> 0 bytes .../AppIcon-29@2x~ipad.png | Bin 2133 -> 0 bytes .../AppIconDev.appiconset/AppIcon-29@3x.png | Bin 3092 -> 0 bytes .../AppIconDev.appiconset/AppIcon-29~ipad.png | Bin 1007 -> 0 bytes .../AppIconDev.appiconset/AppIcon-40@2x.png | Bin 2899 -> 0 bytes .../AppIcon-40@2x~ipad.png | Bin 2899 -> 0 bytes .../AppIconDev.appiconset/AppIcon-40@3x.png | Bin 4419 -> 0 bytes .../AppIconDev.appiconset/AppIcon-40~ipad.png | Bin 1368 -> 0 bytes .../AppIcon-60@2x~car.png | Bin 4419 -> 0 bytes .../AppIcon-60@3x~car.png | Bin 6832 -> 0 bytes .../AppIcon-83.5@2x~ipad.png | Bin 6126 -> 0 bytes .../AppIconDev.appiconset/AppIcon@2x.png | Bin 4419 -> 0 bytes .../AppIconDev.appiconset/AppIcon@2x~ipad.png | Bin 5615 -> 0 bytes .../AppIconDev.appiconset/AppIcon@3x.png | Bin 6832 -> 0 bytes .../AppIcon~ios-marketing.png | Bin 62620 -> 0 bytes .../AppIconDev.appiconset/AppIcon~ipad.png | Bin 2761 -> 0 bytes .../AppIconDev.appiconset/Contents.json | 178 +- .../AppIconDev.appiconset/DEV_Store.png | Bin 0 -> 26766 bytes .../AppIconDev.appiconset/DEV_iPad.png | Bin 0 -> 2660 bytes .../AppIconDev.appiconset/DEV_iPad@2x.png | Bin 0 -> 5565 bytes .../AppIconDev.appiconset/DEV_iPadPro@2x.png | Bin 0 -> 6140 bytes .../DEV_iPhoneApp@2x 1.png | Bin 0 -> 4227 bytes .../DEV_iPhoneApp@2x.png | Bin 0 -> 4227 bytes .../DEV_iPhoneApp@3x 1.png | Bin 0 -> 6767 bytes .../DEV_iPhoneApp@3x.png | Bin 0 -> 6767 bytes .../DEV_notification.png | Bin 0 -> 716 bytes .../DEV_notification@2x 1.png | Bin 0 -> 1420 bytes .../DEV_notification@2x.png | Bin 0 -> 1420 bytes .../DEV_notification@3x.png | Bin 0 -> 2098 bytes .../AppIconDev.appiconset/DEV_settings 1.png | Bin 0 -> 1007 bytes .../AppIconDev.appiconset/DEV_settings.png | Bin 0 -> 1007 bytes .../DEV_settings@2x 1.png | Bin 0 -> 1990 bytes .../AppIconDev.appiconset/DEV_settings@2x.png | Bin 0 -> 1990 bytes .../AppIconDev.appiconset/DEV_settings@3x.png | Bin 0 -> 3017 bytes .../AppIconDev.appiconset/DEV_spotlight.png | Bin 0 -> 1420 bytes .../DEV_spotlight@2x 1.png | Bin 0 -> 2850 bytes .../DEV_spotlight@2x.png | Bin 0 -> 2850 bytes .../DEV_spotlight@3x.png | Bin 0 -> 4227 bytes ios/NewExpensify/Info.plist | 12 +- ios/NewExpensifyTests/Info.plist | 4 +- ios/Podfile | 12 + ios/Podfile.lock | 72 +- jest.config.js | 2 +- main.jsbundle.map | 1 - package-lock.json | 13484 +++++++--------- package.json | 26 +- ...t-navigation+material-top-tabs+6.6.3.patch | 146 + patches/@react-navigation+native+6.1.6.patch | 299 + ...navigation+stack+6.3.16+001+initial.patch} | 0 ...on+stack+6.3.16+002+dontDetachScreen.patch | 68 + ...ive+0.72.3+004+ModalKeyboardFlashing.patch | 18 + scripts/setup-mapbox-sdk-walkthrough.sh | 55 + scripts/setup-mapbox-sdk.sh | 140 + src/App.js | 2 + src/{CONFIG.js => CONFIG.ts} | 57 +- src/{CONST.js => CONST.ts} | 193 +- src/Expensify.js | 22 +- src/{NAVIGATORS.js => NAVIGATORS.ts} | 2 +- src/ONYXKEYS.js | 266 - src/ONYXKEYS.ts | 425 + src/ROUTES.js | 56 +- src/{SCREENS.js => SCREENS.ts} | 7 +- src/TIMEZONES.js | 421 + src/components/AddPlaidBankAccount.js | 290 +- src/components/AddressSearch/index.js | 78 +- src/components/AmountTextInput.js | 8 +- .../BaseAnchorForCommentsOnly.js | 17 +- .../AnimatedStep/AnimatedStepContext.js | 5 + .../AnimatedStep/AnimatedStepProvider.js | 17 + .../index.js} | 34 +- .../AnimatedStep/useAnimatedStepContext.js | 12 + src/components/AttachmentModal.js | 29 +- src/components/AttachmentPicker/index.js | 13 +- .../AttachmentPicker/index.native.js | 455 +- .../AttachmentCarousel/CarouselButtons.js | 2 +- .../AttachmentCarousel/Pager/index.js | 3 +- .../attachmentCarouselPropTypes.js | 4 + .../extractAttachmentsFromReport.js | 56 +- .../Attachments/AttachmentCarousel/index.js | 136 +- .../AttachmentCarousel/index.native.js | 119 +- .../AttachmentViewPdf/index.native.js | 12 +- .../Attachments/AttachmentView/index.js | 17 +- .../autoCompleteSuggestionsPropTypes.js | 7 +- .../AutoCompleteSuggestions/index.js | 27 +- .../AutoCompleteSuggestions/index.native.js | 2 +- src/components/AutoUpdateTime.js | 14 +- src/components/AvatarWithDisplayName.js | 73 +- src/components/BaseMiniContextMenuItem.js | 1 + src/components/BigNumberPad.js | 3 + src/components/BlockingViews/BlockingView.js | 47 +- .../BlockingViews/FullPageNotFoundView.js | 30 +- src/components/Button/index.js | 4 +- src/components/ButtonWithDropdownMenu.js | 38 +- .../CategoryPicker/categoryPickerPropTypes.js | 24 + src/components/CategoryPicker/index.js | 56 + src/components/Checkbox.js | 3 +- src/components/Composer/index.js | 575 +- src/components/ConfirmContent.js | 114 +- src/components/ConfirmModal.js | 33 + src/components/ConfirmedRoute.js | 126 + src/components/ConnectBankAccountButton.js | 4 +- .../CountryPicker/CountrySelectorModal.js | 19 +- src/components/CountryPicker/index.js | 13 +- src/components/CurrencySymbolButton.js | 17 +- .../DeeplinkRedirectLoadingIndicator.js | 37 +- .../DeeplinkWrapper/index.website.js | 81 +- .../DisplayNames/DisplayNamesTooltipItem.js | 79 + .../DisplayNames/DisplayNamesWithTooltip.js | 92 + .../DisplayNamesWithoutTooltip.js | 39 + src/components/DisplayNames/index.js | 125 +- src/components/DistanceRequest.js | 230 +- src/components/DownloadAppModal.js | 77 + src/components/EmojiPicker/EmojiPicker.js | 22 +- .../EmojiPicker/EmojiPickerButton.js | 12 +- .../EmojiPickerMenu/index.native.js | 4 +- src/components/EmojiSuggestions.js | 9 +- src/components/ExceededCommentLength.js | 22 +- src/components/Form.js | 20 +- src/components/FormSubmit/index.js | 23 +- .../HTMLRenderers/AnchorRenderer.js | 15 +- .../HTMLRenderers/ImageRenderer.js | 20 +- .../PreRenderer/BasePreRenderer.js | 2 +- .../headerWithBackButtonPropTypes.js | 4 +- src/components/HeaderWithBackButton/index.js | 4 +- src/components/Icon/Expensicons.js | 10 +- src/components/Icon/Illustrations.js | 2 + src/components/Icon/index.js | 14 +- src/components/Icon/svgs/LoungeAccessIcon.js | 70 + src/components/IllustratedHeaderPageLayout.js | 4 +- src/components/Image/imagePropTypes.js | 2 +- src/components/Image/index.js | 4 +- src/components/Image/index.native.js | 5 +- src/components/ImageView/index.js | 407 +- src/components/ImageView/index.native.js | 347 +- src/components/Indicator.js | 11 +- src/components/KYCWall/BaseKYCWall.js | 15 +- src/components/KYCWall/kycWallPropTypes.js | 6 +- .../LHNOptionsList/LHNOptionsList.js | 9 +- src/components/LHNOptionsList/OptionRowLHN.js | 31 +- .../LHNOptionsList/OptionRowLHNData.js | 1 + src/components/LottieAnimations.js | 3 +- src/components/MagicCodeInput.js | 2 +- src/components/MapView/Direction.tsx | 30 + src/components/MapView/Direction.web.tsx | 48 + src/components/MapView/MapView.tsx | 97 + src/components/MapView/MapView.web.tsx | 96 + src/components/MapView/MapViewTypes.ts | 56 + src/components/MapView/index.js | 3 + src/components/MapView/responder/index.ios.ts | 5 + src/components/MapView/responder/index.ts | 8 + src/components/MapView/utils.ts | 13 + src/components/MentionSuggestions.js | 5 + src/components/MenuItem.js | 7 +- src/components/Modal/BaseModal.js | 327 +- src/components/Modal/index.android.js | 10 + src/components/MoneyReportHeader.js | 107 +- .../MoneyRequestConfirmationList.js | 213 +- src/components/MoneyRequestDetails.js | 231 - src/components/MoneyRequestHeader.js | 27 +- src/components/MoneyRequestHeaderStatusBar.js | 24 + src/components/MoneyRequestSkeletonView.js | 40 + .../CalendarPicker/YearPickerModal.js | 9 +- src/components/OfflineWithFeedback.js | 6 +- src/components/OptionsList/BaseOptionsList.js | 299 +- .../OptionsSelector/BaseOptionsSelector.js | 105 +- src/components/PDFView/PDFPasswordForm.js | 214 +- src/components/PDFView/index.js | 58 +- src/components/Picker/BasePicker.js | 3 +- src/components/PlaidLink/index.js | 1 + src/components/PlaidLink/index.native.js | 3 + .../PlaidLink/plaidLinkPropTypes.js | 3 + src/components/PopoverProvider/index.js | 5 +- src/components/PopoverWithMeasuredContent.js | 4 +- src/components/PopoverWithoutOverlay/index.js | 1 + .../Pressable/GenericPressable/index.js | 3 +- .../Pressable/PressableWithDelayToggle.js | 4 +- .../Pressable/PressableWithFeedback.js | 16 +- src/components/Reactions/AddReactionBubble.js | 2 +- .../Reactions/EmojiReactionBubble.js | 18 +- .../Reactions/MiniQuickEmojiReactions.js | 2 +- .../ReportActionItemEmojiReactions.js | 15 +- .../ReportActionItem/ChronosOOOListActions.js | 10 +- src/components/ReportActionItem/IOUPreview.js | 288 - .../ReportActionItem/MoneyRequestAction.js | 117 +- .../ReportActionItem/MoneyRequestPreview.js | 362 + .../ReportActionItem/MoneyRequestView.js | 170 +- .../ReportActionItem/ReportActionItemImage.js | 85 + .../ReportActionItemImages.js | 82 + .../ReportActionItem/ReportPreview.js | 161 +- .../ReportActionItem/TaskPreview.js | 7 +- src/components/ReportActionItem/TaskView.js | 8 +- src/components/ReportWelcomeText.js | 37 +- src/components/RoomHeaderAvatars.js | 72 +- .../SelectionList/BaseSelectionList.js | 411 + .../SelectionList/CheckboxListItem.js | 89 + src/components/SelectionList/RadioListItem.js | 54 + .../index.android.js | 10 +- .../index.ios.js | 10 +- .../index.js | 10 +- .../SelectionList/selectionListPropTypes.js | 161 + .../BaseSelectionListRadio.js | 277 - .../SelectionListRadio/RadioListItem.js | 74 - .../selectionListRadioPropTypes.js | 88 - src/components/SettlementButton.js | 11 +- .../AppleAuthWrapper/index.ios.js | 27 + .../SignInButtons/AppleAuthWrapper/index.js | 5 + .../AppleSignIn/index.android.js | 56 + .../AppleSignIn/index.desktop.js | 30 + .../SignInButtons/AppleSignIn/index.ios.js | 54 + .../AppleSignIn/index.website.js | 150 + .../SignInButtons/GetUserLanguage.js | 14 + .../GoogleSignIn/index.desktop.js | 34 + .../GoogleSignIn/index.native.js | 55 + .../GoogleSignIn/index.website.js | 94 + src/components/SignInButtons/IconButton.js | 56 + src/components/SignInPageForm/index.js | 73 +- .../StatePicker/StateSelectorModal.js | 19 +- src/components/StatePicker/index.js | 13 +- src/components/SubscriptAvatar.js | 10 +- src/components/SwipeableView/index.native.js | 39 +- src/components/TabSelector/TabIcon.js | 49 + src/components/TabSelector/TabLabel.js | 42 + src/components/TabSelector/TabSelector.js | 68 +- src/components/TabSelector/TabSelectorItem.js | 52 +- src/components/TaskHeaderActionButton.js | 37 +- src/components/TextInput/BaseTextInput.js | 16 +- src/components/TextInputWithCurrencySymbol.js | 105 - .../BaseTextInputWithCurrencySymbol.js | 72 + .../index.android.js | 39 + .../TextInputWithCurrencySymbol/index.js | 26 + .../textInputWithCurrencySymbolPropTypes.js | 45 + src/components/TextLink.js | 7 +- src/components/ThreeDotsMenu/index.js | 118 +- src/components/ThumbnailImage.js | 19 +- .../Tooltip/TooltipRenderedOnPageBody.js | 4 +- src/components/Tooltip/index.native.js | 4 +- src/components/UserDetailsTooltip/index.js | 4 +- .../BaseVideoChatButtonAndMenu.js | 9 +- src/components/WalletStatementModal/index.js | 72 +- src/components/categoryPropTypes.js | 9 + src/components/menuItemPropTypes.js | 6 +- src/components/transactionPropTypes.js | 77 + src/components/withAnimatedRef.js | 4 +- .../withCurrentUserPersonalDetails.js | 3 +- src/components/withLocalize.js | 1 - src/components/withNavigation.js | 3 +- src/components/withNavigationFallback.js | 5 +- src/components/withNavigationFocus.js | 4 +- src/components/withToggleVisibilityView.js | 3 +- src/components/withViewportOffsetTop.js | 4 +- src/hooks/useActiveElement/index.js | 25 + src/hooks/useActiveElement/index.native.js | 3 + src/hooks/useDefaultDragAndDrop/index.js | 21 + .../useDefaultDragAndDrop/index.native.js} | 0 src/hooks/useDragAndDrop.js | 4 +- src/hooks/useSingleExecution.js | 40 + src/hooks/useWaitForNavigation.js | 33 + src/hooks/useWindowDimensions.js | 2 + src/languages/en.js | 120 +- src/languages/es.js | 149 +- src/libs/API.js | 5 +- src/libs/Browser/index.web.js | 6 +- src/libs/CardUtils.js | 33 - src/libs/CardUtils.ts | 18 + src/libs/ComponentUtils/index.js | 8 - src/libs/ComponentUtils/index.native.js | 5 - src/libs/ComponentUtils/index.native.ts | 7 + src/libs/ComponentUtils/index.ts | 10 + src/libs/ComponentUtils/types.ts | 5 + src/libs/ComposerFocusManager.js | 23 + .../debouncedSaveReportComment.js | 13 + src/libs/ComposerUtils/getDraftComment.js | 24 + src/libs/CurrencyUtils.js | 55 +- src/libs/DateUtils.js | 190 +- src/libs/DistanceRequestUtils.js | 97 + src/libs/EmojiUtils.js | 60 +- .../Errors/{HttpsError.js => HttpsError.ts} | 10 +- src/libs/IOUUtils.js | 75 +- src/libs/LoginUtils.js | 45 +- src/libs/MakeCancellablePromise.js | 22 - src/libs/Middleware/SaveResponseInOnyx.js | 24 + src/libs/MoneyRequestUtils.js | 13 +- .../Navigation/AppNavigator/AuthScreens.js | 222 +- .../AppNavigator/ModalStackNavigators.js | 134 +- .../Navigators/CentralPaneNavigator.js | 18 + .../Navigators/FullScreenNavigator.js | 21 - .../AppNavigator/Navigators/Overlay.js | 49 + .../Navigators/RightModalNavigator.js | 202 +- .../Navigation/AppNavigator/PublicScreens.js | 12 + .../AppNavigator/ReportScreenWrapper.js | 10 + .../CustomRouter.js | 2 +- .../index.js | 21 +- .../ThreePaneView.js | 96 - .../getRootNavigatorScreenOptions.js | 70 + .../modalCardStyleInterpolator.js | 16 +- src/libs/Navigation/Navigation.js | 22 +- src/libs/Navigation/NavigationRoot.js | 16 +- src/libs/Navigation/currentUrl/index.js | 6 - .../Navigation/currentUrl/index.native.js | 6 - .../Navigation/currentUrl/index.native.ts | 5 + src/libs/Navigation/currentUrl/index.ts | 5 + src/libs/Navigation/currentUrl/types.ts | 3 + src/libs/Navigation/linkTo.js | 19 +- src/libs/Navigation/linkingConfig.js | 65 +- .../shouldPreventDeeplinkPrompt/index.js | 13 + src/libs/Network/SequentialQueue.js | 44 +- .../subscribePushNotification/index.js | 26 + ...alNotification.js => LocalNotification.ts} | 8 +- src/libs/NumberUtils.js | 16 +- src/libs/OptionsListUtils.js | 287 +- src/libs/PaymentUtils.js | 12 +- src/libs/Permissions.js | 26 +- src/libs/PolicyUtils.js | 4 +- src/libs/PusherConnectionManager.js | 9 +- src/libs/ReceiptUtils.js | 46 +- src/libs/ReportActionComposeFocusManager.js | 26 +- src/libs/ReportActionsUtils.js | 74 +- src/libs/ReportUtils.js | 1011 +- src/libs/SidebarUtils.js | 32 +- src/libs/StringUtils.js | 12 + src/libs/SuggestionUtils.js | 29 + src/libs/TransactionUtils.js | 326 +- src/libs/Url.js | 75 +- src/libs/UserUtils.js | 4 +- src/libs/ValidationUtils.js | 19 + src/libs/__mocks__/Permissions.js | 2 +- src/libs/actions/App.js | 65 +- src/libs/actions/BankAccounts.js | 14 +- src/libs/actions/CanvasSize.js | 43 + src/libs/actions/DemoActions.js | 102 + src/libs/actions/DownloadAppModal.js | 11 + src/libs/actions/EmojiPickerAction.js | 18 +- src/libs/actions/IOU.js | 620 +- src/libs/actions/Link.js | 37 +- src/libs/actions/MapboxToken.js | 77 +- .../actions/MemoryOnlyKeys/MemoryOnlyKeys.js | 19 + .../index.js | 12 + .../index.native.js | 6 + src/libs/actions/PaymentMethods.js | 30 +- src/libs/actions/PersistedRequests.js | 5 +- src/libs/actions/Policy.js | 50 +- src/libs/actions/QueuedOnyxUpdates.js | 2 +- .../ReimbursementAccount/navigation.js | 7 +- src/libs/actions/Report.js | 80 +- src/libs/actions/Session/index.js | 154 +- src/libs/actions/TeachersUnite.js | 180 + src/libs/actions/Transaction.js | 183 +- src/libs/actions/TwoFactorAuthActions.js | 22 +- src/libs/actions/User.js | 12 +- src/libs/actions/Welcome.js | 12 +- .../{index.android.js => index.android.ts} | 10 +- src/libs/convertToLTR/index.js | 3 - src/libs/convertToLTR/index.ts | 5 + src/libs/convertToLTR/types.ts | 3 + src/libs/fileDownload/FileUtils.js | 12 +- src/libs/fileDownload/index.js | 4 +- src/libs/focusWithDelay.js | 35 + src/libs/focusWithDelay/focusWithDelay.js | 40 - src/libs/focusWithDelay/index.js | 7 - src/libs/focusWithDelay/index.native.js | 6 - .../{getButtonState.js => getButtonState.ts} | 16 +- src/libs/getClickedTargetLocation/index.js | 11 - .../getClickedTargetLocation/index.native.js | 18 - .../getClickedTargetLocation/index.native.ts | 8 + src/libs/getClickedTargetLocation/index.ts | 8 + src/libs/getClickedTargetLocation/types.ts | 5 + ...yVisible.js => getIsReportFullyVisible.ts} | 6 +- src/libs/getModalState.js | 21 + .../getPlaidDesktopMessage/index.desktop.js | 1 - .../getPlaidDesktopMessage/index.desktop.ts | 5 + src/libs/getPlaidDesktopMessage/index.ts | 5 + src/libs/getPlaidDesktopMessage/types.ts | 3 + .../index.native.js | 1 - .../index.native.ts | 5 + .../{index.js => index.ts} | 7 +- .../getPlaidOAuthReceivedRedirectURI/types.ts | 3 + src/libs/getPlatform/index.android.js | 5 - src/libs/getPlatform/index.android.ts | 6 + src/libs/getPlatform/index.desktop.js | 5 - src/libs/getPlatform/index.desktop.ts | 6 + src/libs/getPlatform/index.ios.js | 5 - src/libs/getPlatform/index.ios.ts | 6 + src/libs/getPlatform/index.ts | 6 + src/libs/getPlatform/index.website.js | 5 - src/libs/getPlatform/types.ts | 6 + .../index.android.js | 4 - .../index.android.ts | 6 + src/libs/getWindowHeightAdjustment/index.js | 4 - src/libs/getWindowHeightAdjustment/index.ts | 6 + src/libs/getWindowHeightAdjustment/types.ts | 5 + src/libs/isInputAutoFilled.js | 2 +- src/libs/isSelectorSupported/index.native.js | 4 - src/libs/isSelectorSupported/index.native.ts | 6 + .../{index.js => index.ts} | 10 +- src/libs/isSelectorSupported/types.ts | 3 + src/libs/requireParameters.js | 27 - src/libs/requireParameters.ts | 28 + src/libs/searchCountryOptions.js | 16 +- src/libs/shouldDelayFocus/index.android.js | 2 - src/libs/shouldDelayFocus/index.android.ts | 6 + src/libs/shouldDelayFocus/index.ts | 5 + src/libs/shouldDelayFocus/types.ts | 3 + .../index.android.js} | 0 .../index.js | 0 src/libs/useNativeDriver/index.js | 1 - src/libs/useNativeDriver/index.native.ts | 5 + src/libs/useNativeDriver/index.ts | 5 + src/libs/useNativeDriver/types.ts | 3 + src/pages/AddPersonalBankAccountPage.js | 2 +- src/pages/DemoSetupPage.js | 41 + src/pages/EditRequestAmountPage.js | 79 + src/pages/EditRequestCreatedPage.js | 53 + src/pages/EditRequestDescriptionPage.js | 30 +- src/pages/EditRequestMerchantPage.js | 74 + src/pages/EditRequestPage.js | 155 +- .../EnablePayments/AdditionalDetailsStep.js | 109 +- .../EnablePayments/EnablePaymentsPage.js | 2 +- src/pages/EnablePayments/OnfidoPrivacy.js | 90 +- src/pages/ErrorPage/NotFoundPage.js | 5 +- src/pages/GetAssistancePage.js | 4 +- src/pages/NewChatPage.js | 2 +- src/pages/ProfilePage.js | 7 +- .../ReimbursementAccount/ACHContractStep.js | 2 +- .../BankAccountManualStep.js | 24 +- .../BankAccountPlaidStep.js | 2 +- .../ReimbursementAccount/BankAccountStep.js | 14 +- src/pages/ReimbursementAccount/CompanyStep.js | 341 +- .../ContinueBankAccountSetup.js | 4 + .../ReimbursementAccountPage.js | 25 +- .../ReimbursementAccount/RequestorStep.js | 39 +- .../ReimbursementAccount/ValidationStep.js | 4 +- src/pages/ReportDetailsPage.js | 4 +- src/pages/ReportParticipantsPage.js | 11 +- src/pages/SearchPage.js | 2 +- src/pages/TeachersUnite/ImTeacherPage.js | 54 + .../TeachersUnite/IntroSchoolPrincipalPage.js | 141 + src/pages/TeachersUnite/KnowATeacherPage.js | 152 + src/pages/TeachersUnite/SaveTheWorldPage.js | 93 + src/pages/home/HeaderView.js | 2 +- src/pages/home/ReportScreen.js | 465 +- .../BaseReportActionContextMenu.js | 47 +- .../report/ContextMenu/ContextMenuActions.js | 58 +- .../PopoverReportActionContextMenu.js | 12 +- .../ContextMenu/ReportActionContextMenu.js | 7 +- ...genericReportActionContextMenuPropTypes.js | 5 +- src/pages/home/report/ParticipantLocalTime.js | 13 +- .../ReactionList/PopoverReactionList/index.js | 14 +- src/pages/home/report/ReportActionCompose.js | 1340 -- .../AttachmentPickerWithMenuItems.js | 289 + .../ComposerWithSuggestions.js | 561 + .../ReportActionCompose.js | 448 + .../report/ReportActionCompose/SendButton.js | 80 + .../SilentCommentUpdater.js | 72 + .../ReportActionCompose/SuggestionEmoji.js | 267 + .../ReportActionCompose/SuggestionMention.js | 312 + .../report/ReportActionCompose/Suggestions.js | 142 + .../composerWithSuggestionsProps.js | 123 + .../ReportActionCompose/suggestionProps.js | 33 + src/pages/home/report/ReportActionItem.js | 99 +- .../home/report/ReportActionItemCreated.js | 5 +- .../home/report/ReportActionItemFragment.js | 6 +- .../home/report/ReportActionItemMessage.js | 20 +- .../report/ReportActionItemMessageEdit.js | 39 +- .../home/report/ReportActionItemSingle.js | 43 +- src/pages/home/report/ReportActionsList.js | 266 +- src/pages/home/report/ReportActionsView.js | 180 +- src/pages/home/report/ReportFooter.js | 4 +- src/pages/home/report/withReportOrNotFound.js | 22 +- .../home/sidebar/AvatarWithOptionalStatus.js | 65 + .../sidebar/PressableAvatarWithIndicator.js | 64 + src/pages/home/sidebar/SidebarLinks.js | 82 +- src/pages/home/sidebar/SidebarLinksData.js | 13 +- .../SidebarScreen/BaseSidebarScreen.js | 10 - .../FloatingActionButtonAndPopover.js | 40 +- src/pages/home/sidebar/SignInButton.js | 33 + .../SignInOrAvatarWithOptionalStatus.js | 63 + src/pages/iou/DistanceRequestPage.js | 44 +- src/pages/iou/IOUCurrencySelection.js | 27 +- src/pages/iou/MoneyRequestCategoryPage.js | 72 + src/pages/iou/MoneyRequestDatePage.js | 121 + src/pages/iou/MoneyRequestDescriptionPage.js | 173 +- src/pages/iou/MoneyRequestMerchantPage.js | 133 + src/pages/iou/MoneyRequestSelectorPage.js | 66 +- .../ReceiptSelector/NavigationAwareCamera.js | 77 + src/pages/iou/ReceiptSelector/index.js | 38 +- src/pages/iou/ReceiptSelector/index.native.js | 44 +- src/pages/iou/SplitBillDetailsPage.js | 27 +- src/pages/iou/WaypointEditor.js | 258 + src/pages/iou/WaypointEditorPage.js | 49 + src/pages/iou/propTypes/index.js | 42 + src/pages/iou/steps/MoneyRequestAmountForm.js | 76 +- .../iou/steps/MoneyRequestConfirmPage.js | 194 +- .../MoneyRequestParticipantsPage.js | 51 +- .../MoneyRequestParticipantsSelector.js | 7 + src/pages/iou/steps/NewRequestAmountPage.js | 71 +- src/pages/settings/InitialSettingsPage.js | 56 +- .../settings/Payments/PaymentsPage/index.js | 10 - .../Payments/PaymentsPage/index.native.js | 3 - .../settings/Preferences/LanguagePage.js | 4 +- .../settings/Preferences/PriorityModePage.js | 4 +- src/pages/settings/Preferences/ThemePage.js | 4 +- .../Profile/Contacts/NewContactMethodPage.js | 27 +- .../ValidateCodeForm/BaseValidateCodeForm.js | 6 + .../Profile/CustomStatus/StatusPage.js | 18 +- src/pages/settings/Profile/DisplayNamePage.js | 2 - .../settings/Profile/LoungeAccessPage.js | 4 +- .../Profile/PersonalDetails/AddressPage.js | 12 +- .../PersonalDetails/DateOfBirthPage.js | 11 +- src/pages/settings/Profile/PronounsPage.js | 36 +- .../settings/Profile/TimezoneSelectPage.js | 34 +- .../settings/Report/ReportSettingsPage.js | 19 +- .../settings/Security/CloseAccountPage.js | 7 +- .../settings/Security/SecuritySettingsPage.js | 10 +- .../Security/TwoFactorAuth/CodesPage.js | 149 - .../Security/TwoFactorAuth/DisablePage.js | 57 - .../Security/TwoFactorAuth/IsEnabledPage.js | 74 - .../TwoFactorAuth/StepWrapper/StepWrapper.js | 47 + .../StepWrapper/StepWrapperPropTypes.js | 28 + .../Security/TwoFactorAuth/Steps/CodesStep.js | 125 + .../TwoFactorAuth/Steps/DisabledStep.js | 35 + .../TwoFactorAuth/Steps/EnabledStep.js | 66 + .../TwoFactorAuth/Steps/SuccessStep.js | 38 + .../TwoFactorAuth/Steps/VerifyStep.js | 136 + .../Security/TwoFactorAuth/SuccessPage.js | 41 - .../TwoFactorAuthContext/index.js | 4 + .../TwoFactorAuthContext/useTwoFactorAuth.js | 6 + .../TwoFactorAuth/TwoFactorAuthPage.js | 13 + .../TwoFactorAuth/TwoFactorAuthPropTypes.js | 27 + .../TwoFactorAuth/TwoFactorAuthSteps.js | 78 + .../Security/TwoFactorAuth/VerifyPage.js | 175 - .../{Payments => Wallet}/AddDebitCardPage.js | 36 +- .../{Payments => Wallet}/AddPayPalMePage.js | 20 +- .../ChooseTransferAccountPage.js | 4 +- .../{Payments => Wallet}/PaymentMethodList.js | 33 +- .../TransferBalancePage.js | 20 +- .../WalletPage/BaseWalletPage.js} | 110 +- src/pages/settings/Wallet/WalletPage/index.js | 10 + .../Wallet/WalletPage/index.native.js | 3 + .../WalletPage/walletPagePropTypes.js} | 6 +- .../walletTransferPropTypes.js | 0 .../signin/AppleSignInDesktopPage/index.js | 8 + .../AppleSignInDesktopPage/index.website.js | 9 + src/pages/signin/DesktopRedirectPage.js | 18 + .../signin/DesktopSignInRedirectPage/index.js | 8 + .../index.website.js | 8 + .../signin/GoogleSignInDesktopPage/index.js | 8 + .../GoogleSignInDesktopPage/index.website.js | 9 + .../BaseLoginForm.js} | 109 +- src/pages/signin/LoginForm/index.js | 26 + src/pages/signin/LoginForm/index.native.js | 48 + src/pages/signin/SignInHeroCopy.js | 17 +- src/pages/signin/SignInModal.js | 36 + src/pages/signin/SignInPage.js | 48 +- src/pages/signin/SignInPageHero.js | 18 +- src/pages/signin/SignInPageLayout/Footer.js | 5 +- .../SignInPageLayout/SignInPageContent.js | 13 +- src/pages/signin/SignInPageLayout/index.js | 71 +- src/pages/signin/ThirdPartySignInPage.js | 109 + src/pages/tasks/NewTaskDescriptionPage.js | 3 +- src/pages/tasks/NewTaskDetailsPage.js | 3 +- src/pages/tasks/NewTaskPage.js | 3 +- src/pages/tasks/TaskAssigneeSelectorModal.js | 15 +- src/pages/tasks/TaskDescriptionPage.js | 3 +- .../TaskShareDestinationSelectorModal.js | 8 +- src/pages/workspace/WorkspaceInitialPage.js | 7 +- .../workspace/WorkspaceInviteMessagePage.js | 12 +- src/pages/workspace/WorkspaceInvitePage.js | 69 +- src/pages/workspace/WorkspaceMembersPage.js | 423 +- .../workspace/WorkspacePageWithSections.js | 4 +- src/pages/workspace/WorkspacesListPage.js | 2 +- .../reimburse/WorkspaceRateAndUnitPage.js | 6 +- src/setup/index.js | 18 +- src/setup/platformSetup/index.native.js | 5 - src/stories/Checkbox.stories.js | 1 + src/stories/Composer.stories.js | 7 +- src/stories/MagicCodeInput.stories.js | 13 +- src/stories/SelectionList.stories.js | 397 + src/stories/SelectionListRadio.stories.js | 207 - src/styles/{StyleUtils.js => StyleUtils.ts} | 621 +- ...StylesContext.js => ThemeStylesContext.ts} | 0 src/styles/addOutlineWidth/index.js | 25 - src/styles/addOutlineWidth/index.native.js | 14 - src/styles/addOutlineWidth/index.native.ts | 10 + src/styles/addOutlineWidth/index.ts | 19 + src/styles/addOutlineWidth/types.ts | 6 + src/styles/cardStyles/index.js | 8 +- src/styles/codeStyles/index.android.js | 14 - src/styles/codeStyles/index.android.ts | 16 + src/styles/codeStyles/index.ios.js | 15 - src/styles/codeStyles/index.ios.ts | 17 + src/styles/codeStyles/index.js | 5 - src/styles/codeStyles/index.ts | 7 + src/styles/codeStyles/types.ts | 8 + src/styles/colors.js | 2 + src/styles/editedLabelStyles/index.js | 4 - src/styles/editedLabelStyles/index.native.js | 1 - src/styles/editedLabelStyles/index.native.ts | 5 + src/styles/editedLabelStyles/index.ts | 7 + src/styles/editedLabelStyles/types.ts | 6 + .../{index.native.js => index.native.ts} | 3 +- src/styles/fontFamily/{index.js => index.ts} | 3 +- src/styles/fontFamily/types.ts | 15 + ...etBaseModalStyles.js => getModalStyles.ts} | 66 +- src/styles/getModalStyles/index.js | 3 - .../getBaseNavigationModalCardStyles.js | 10 - .../{index.website.js => index.desktop.js} | 8 +- .../getNavigationModalCardStyles/index.js | 3 - .../getNavigationModalCardStyles/index.ts | 3 + .../index.website.ts | 14 + .../getNavigationModalCardStyles/types.ts | 9 + .../{index.desktop.js => index.desktop.ts} | 11 +- src/styles/getPopOverVerticalOffset/index.js | 1 - src/styles/getPopOverVerticalOffset/index.ts | 5 + src/styles/getPopOverVerticalOffset/types.ts | 5 + ...=> getPopoverWithMeasuredContentStyles.ts} | 18 +- ...js => getReportActionContextMenuStyles.ts} | 17 +- src/styles/italic/index.android.js | 3 - src/styles/italic/index.android.ts | 5 + src/styles/italic/index.js | 3 - src/styles/italic/index.ts | 5 + src/styles/italic/types.ts | 6 + .../index.ios.js | 3 - .../index.ios.ts | 7 + .../index.js | 1 - .../index.ts | 5 + .../types.ts | 5 + .../{index.native.js => index.native.ts} | 3 +- .../optionRowStyles/{index.js => index.ts} | 3 +- src/styles/optionRowStyles/types.ts | 6 + src/styles/overflowXHidden/index.js | 3 - src/styles/overflowXHidden/index.native.js | 1 - src/styles/overflowXHidden/index.native.ts | 5 + src/styles/overflowXHidden/index.ts | 7 + src/styles/overflowXHidden/types.ts | 5 + src/styles/pointerEventsAuto/index.js | 3 - src/styles/pointerEventsAuto/index.native.js | 1 - src/styles/pointerEventsAuto/index.native.ts | 5 + src/styles/pointerEventsAuto/index.ts | 7 + src/styles/pointerEventsAuto/types.ts | 5 + src/styles/pointerEventsNone/index.js | 3 - src/styles/pointerEventsNone/index.native.js | 1 - src/styles/pointerEventsNone/index.native.ts | 5 + src/styles/pointerEventsNone/index.ts | 7 + src/styles/pointerEventsNone/types.ts | 5 + ...our.js => roundToNearestMultipleOfFour.ts} | 5 +- src/styles/styles.js | 307 +- src/styles/themes/default.js | 3 + .../{index.native.js => index.native.ts} | 6 +- .../utilities/cursor/{index.js => index.ts} | 6 +- src/styles/utilities/cursor/types.ts | 18 + src/styles/utilities/{flex.js => flex.ts} | 8 +- .../utilities/{overflow.js => overflow.ts} | 7 +- src/styles/utilities/overflowAuto/index.js | 3 - .../utilities/overflowAuto/index.native.js | 4 - .../utilities/overflowAuto/index.native.ts | 8 + src/styles/utilities/overflowAuto/index.ts | 7 + src/styles/utilities/overflowAuto/types.ts | 5 + .../{positioning.js => positioning.ts} | 4 +- src/styles/utilities/{sizing.js => sizing.ts} | 4 +- src/styles/utilities/spacing.js | 24 + src/styles/utilities/textUnderline/index.js | 9 - .../utilities/textUnderline/index.native.js | 4 - .../utilities/textUnderline/index.native.ts | 9 + src/styles/utilities/textUnderline/index.ts | 12 + src/styles/utilities/textUnderline/types.ts | 8 + .../{index.native.js => index.native.ts} | 6 +- .../userSelect/{index.js => index.ts} | 6 +- src/styles/utilities/userSelect/types.ts | 5 + src/styles/utilities/visibility/index.js | 1 - .../utilities/visibility/index.native.js | 1 - .../utilities/visibility/index.native.ts | 8 + src/styles/utilities/visibility/index.ts | 12 + src/styles/utilities/visibility/types.ts | 5 + .../utilities/whiteSpace/index.native.js | 4 - .../utilities/whiteSpace/index.native.ts | 9 + .../whiteSpace/{index.js => index.ts} | 6 +- src/styles/utilities/whiteSpace/types.ts | 5 + .../utilities/wordBreak/index.native.js | 3 - .../utilities/wordBreak/index.native.ts | 8 + .../wordBreak/{index.js => index.ts} | 6 +- src/styles/utilities/wordBreak/types.ts | 5 + ...ritingDirection.js => writingDirection.ts} | 3 +- src/styles/{variables.js => variables.ts} | 12 +- src/{ => types}/global.d.ts | 2 + .../modules/react-native-key-command.d.ts | 30 + src/types/modules/react-native-onyx.d.ts | 10 + src/types/onyx/Account.ts | 52 + src/types/onyx/BankAccount.ts | 72 + src/types/onyx/Beta.ts | 6 + src/types/onyx/BlockedFromConcierge.ts | 9 + src/types/onyx/Card.ts | 17 + src/types/onyx/Credentials.ts | 15 + src/types/onyx/Currency.ts | 15 + src/types/onyx/CustomStatusDraft.ts | 12 + src/types/onyx/Download.ts | 6 + src/types/onyx/Form.ts | 21 + src/types/onyx/FrequentlyUsedEmoji.ts | 18 + src/types/onyx/Fund.ts | 32 + src/types/onyx/IOU.ts | 24 + src/types/onyx/Login.ts | 20 + src/types/onyx/MapboxAccessToken.ts | 7 + src/types/onyx/Modal.ts | 9 + src/types/onyx/Network.ts | 12 + src/types/onyx/OnyxCommon.ts | 17 + src/types/onyx/OriginalMessage.ts | 140 + src/types/onyx/Paypal.ts | 27 + src/types/onyx/PersonalBankAccount.ts | 15 + src/types/onyx/PersonalDetails.ts | 45 + src/types/onyx/PlaidBankAccount.ts | 24 + src/types/onyx/PlaidData.ts | 21 + src/types/onyx/Policy.ts | 37 + src/types/onyx/PolicyMember.ts | 17 + src/types/onyx/PrivatePersonalDetails.ts | 18 + src/types/onyx/QueuedOnyxUpdates.ts | 5 + src/types/onyx/ReceiptModal.ts | 7 + src/types/onyx/RecentWaypoints.ts | 12 + src/types/onyx/ReimbursementAccount.ts | 44 + src/types/onyx/ReimbursementAccountDraft.ts | 30 + src/types/onyx/Report.ts | 86 + src/types/onyx/ReportAction.ts | 85 + src/types/onyx/ReportActionReactions.ts | 15 + src/types/onyx/Request.ts | 8 + src/types/onyx/ScreenShareRequest.ts | 9 + src/types/onyx/SecurityGroup.ts | 5 + src/types/onyx/Session.ts | 17 + src/types/onyx/Task.ts | 27 + src/types/onyx/Transaction.ts | 30 + src/types/onyx/User.ts | 30 + src/types/onyx/UserWallet.ts | 53 + src/types/onyx/WalletAdditionalDetails.ts | 23 + src/types/onyx/WalletOnfido.ts | 26 + src/types/onyx/WalletStatement.ts | 6 + src/types/onyx/WalletTerms.ts | 11 + src/types/onyx/WalletTransfer.ts | 24 + src/types/onyx/index.ts | 94 + src/types/utils/DeepValueOf.ts | 4 + tests/actions/IOUTest.js | 25 +- tests/actions/ReportTest.js | 1 + tests/actions/SessionTest.js | 4 + tests/perf-test/SelectionList.perf-test.js | 120 + .../perf-test/SelectionListRadio.perf-test.js | 48 - tests/ui/UnreadIndicatorsTest.js | 5 +- tests/unit/CIGitLogicTest.sh | 30 +- tests/unit/CurrencyUtilsTest.js | 61 +- tests/unit/DateUtilsTest.js | 92 +- tests/unit/FileUtilsTest.js | 5 +- tests/unit/GitUtilsTest.js | 4 +- tests/unit/IOUUtilsTest.js | 186 +- tests/unit/OptionsListUtilsTest.js | 714 +- tests/unit/ReportUtilsTest.js | 83 +- tests/unit/SidebarFilterTest.js | 65 +- tests/unit/SidebarOrderTest.js | 69 +- tests/unit/SidebarTest.js | 4 +- tests/unit/UrlTest.js | 254 +- tests/unit/createOrUpdateStagingDeployTest.js | 162 +- tests/unit/currencyList.json | 1 - tests/unit/markPullRequestsAsDeployedTest.js | 292 + web/index.html | 11 +- web/proxy.js | 1 + 947 files changed, 65184 insertions(+), 39869 deletions(-) create mode 100644 android/app/src/adhoc/res/drawable/ic_launcher_foreground.xml delete mode 100644 android/app/src/adhoc/res/mipmap-ldpi/ic_launcher.png create mode 100644 android/app/src/development/res/drawable/ic_launcher_foreground.xml delete mode 100644 android/app/src/development/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 android/app/src/development/res/mipmap-ldpi/ic_launcher.png delete mode 100644 android/app/src/development/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 android/app/src/development/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 android/app/src/development/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable/ic_launcher_foreground.xml delete mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 assets/animations/SaveTheWorld.json create mode 100644 assets/images/emptystate__routepending.svg create mode 100644 assets/images/expensify-app-icon.svg create mode 100644 assets/images/heart.svg delete mode 100644 assets/images/lounge-access.svg create mode 100644 assets/images/signIn/apple-logo.svg create mode 100644 assets/images/signIn/google-logo.svg create mode 100644 assets/images/simple-illustrations/simple-illustration__email-address.svg create mode 100644 contributingGuides/APPLE_GOOGLE_SIGNIN.md create mode 100644 docs/Expensify-Card-revenue share for ExpensifyApproved!-partners.md create mode 100644 docs/articles/other/Enable-Location-Access-on-Web.md create mode 100644 docs/articles/other/Expensify-Chat-For-Admins.md create mode 100644 docs/articles/other/Expensify-Chat-For-Conference-Attendees.md create mode 100644 docs/articles/other/Expensify-Chat-For-Conference-Speakers.md create mode 100644 docs/articles/other/Insights.md create mode 100644 docs/assets/images/insights-chart.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/notification.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/notification@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/notification@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/notification@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/settings.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/settings@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/settings@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/settings@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/spotlight.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/spotlight@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/spotlight@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIcon.appiconset/spotlight@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_Store.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_iPadApp.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_iPadApp@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_iPadPro@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_iPhoneApp@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_iPhoneApp@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_iPhoneApp@3x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_iPhoneApp@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_notification.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_notification@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_notification@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_notification@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_settings 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_settings.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_settings@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_settings@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_settings@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_spotlight.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_spotlight@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_spotlight@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/ADHOC_spotlight@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-20@2x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-20@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-20@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-20~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-29.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-29@2x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-29@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-29@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-29~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-40@2x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-40@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-40@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-40~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-60@2x~car.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-60@3x~car.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon-83.5@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon@2x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon~ios-marketing.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconAdHoc.appiconset/AppIcon~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-20@2x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-20@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-20@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-20~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-29.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-29@2x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-29@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-29@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-29~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-40@2x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-40@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-40@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-40~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-60@2x~car.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-60@3x~car.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon-83.5@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon@2x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon@2x~ipad.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon@3x.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon~ios-marketing.png delete mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/AppIcon~ipad.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_Store.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_iPad.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_iPad@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_iPadPro@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_iPhoneApp@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_iPhoneApp@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_iPhoneApp@3x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_iPhoneApp@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_notification.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_notification@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_notification@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_notification@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_settings 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_settings.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_settings@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_settings@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_settings@3x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_spotlight.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_spotlight@2x 1.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_spotlight@2x.png create mode 100644 ios/NewExpensify/Images.xcassets/AppIconDev.appiconset/DEV_spotlight@3x.png delete mode 100644 main.jsbundle.map create mode 100644 patches/@react-navigation+material-top-tabs+6.6.3.patch create mode 100644 patches/@react-navigation+native+6.1.6.patch rename patches/{@react-navigation+stack+6.3.16.patch => @react-navigation+stack+6.3.16+001+initial.patch} (100%) create mode 100644 patches/@react-navigation+stack+6.3.16+002+dontDetachScreen.patch create mode 100644 patches/react-native+0.72.3+004+ModalKeyboardFlashing.patch create mode 100755 scripts/setup-mapbox-sdk-walkthrough.sh create mode 100755 scripts/setup-mapbox-sdk.sh rename src/{CONFIG.js => CONFIG.ts} (56%) rename src/{CONST.js => CONST.ts} (92%) rename src/{NAVIGATORS.js => NAVIGATORS.ts} (96%) delete mode 100755 src/ONYXKEYS.js create mode 100755 src/ONYXKEYS.ts rename src/{SCREENS.js => SCREENS.ts} (68%) create mode 100644 src/TIMEZONES.js create mode 100644 src/components/AnimatedStep/AnimatedStepContext.js create mode 100644 src/components/AnimatedStep/AnimatedStepProvider.js rename src/components/{AnimatedStep.js => AnimatedStep/index.js} (58%) create mode 100644 src/components/AnimatedStep/useAnimatedStepContext.js create mode 100644 src/components/CategoryPicker/categoryPickerPropTypes.js create mode 100644 src/components/CategoryPicker/index.js create mode 100644 src/components/ConfirmedRoute.js create mode 100644 src/components/DisplayNames/DisplayNamesTooltipItem.js create mode 100644 src/components/DisplayNames/DisplayNamesWithTooltip.js create mode 100644 src/components/DisplayNames/DisplayNamesWithoutTooltip.js create mode 100644 src/components/DownloadAppModal.js create mode 100644 src/components/Icon/svgs/LoungeAccessIcon.js create mode 100644 src/components/MapView/Direction.tsx create mode 100644 src/components/MapView/Direction.web.tsx create mode 100644 src/components/MapView/MapView.tsx create mode 100644 src/components/MapView/MapView.web.tsx create mode 100644 src/components/MapView/MapViewTypes.ts create mode 100644 src/components/MapView/index.js create mode 100644 src/components/MapView/responder/index.ios.ts create mode 100644 src/components/MapView/responder/index.ts create mode 100644 src/components/MapView/utils.ts delete mode 100644 src/components/MoneyRequestDetails.js create mode 100644 src/components/MoneyRequestHeaderStatusBar.js create mode 100644 src/components/MoneyRequestSkeletonView.js delete mode 100644 src/components/ReportActionItem/IOUPreview.js create mode 100644 src/components/ReportActionItem/MoneyRequestPreview.js create mode 100644 src/components/ReportActionItem/ReportActionItemImage.js create mode 100644 src/components/ReportActionItem/ReportActionItemImages.js create mode 100644 src/components/SelectionList/BaseSelectionList.js create mode 100644 src/components/SelectionList/CheckboxListItem.js create mode 100644 src/components/SelectionList/RadioListItem.js rename src/components/{SelectionListRadio => SelectionList}/index.android.js (53%) rename src/components/{SelectionListRadio => SelectionList}/index.ios.js (51%) rename src/components/{SelectionListRadio => SelectionList}/index.js (85%) create mode 100644 src/components/SelectionList/selectionListPropTypes.js delete mode 100644 src/components/SelectionListRadio/BaseSelectionListRadio.js delete mode 100644 src/components/SelectionListRadio/RadioListItem.js delete mode 100644 src/components/SelectionListRadio/selectionListRadioPropTypes.js create mode 100644 src/components/SignInButtons/AppleAuthWrapper/index.ios.js create mode 100644 src/components/SignInButtons/AppleAuthWrapper/index.js create mode 100644 src/components/SignInButtons/AppleSignIn/index.android.js create mode 100644 src/components/SignInButtons/AppleSignIn/index.desktop.js create mode 100644 src/components/SignInButtons/AppleSignIn/index.ios.js create mode 100644 src/components/SignInButtons/AppleSignIn/index.website.js create mode 100644 src/components/SignInButtons/GetUserLanguage.js create mode 100644 src/components/SignInButtons/GoogleSignIn/index.desktop.js create mode 100644 src/components/SignInButtons/GoogleSignIn/index.native.js create mode 100644 src/components/SignInButtons/GoogleSignIn/index.website.js create mode 100644 src/components/SignInButtons/IconButton.js create mode 100644 src/components/TabSelector/TabIcon.js create mode 100644 src/components/TabSelector/TabLabel.js delete mode 100644 src/components/TextInputWithCurrencySymbol.js create mode 100644 src/components/TextInputWithCurrencySymbol/BaseTextInputWithCurrencySymbol.js create mode 100644 src/components/TextInputWithCurrencySymbol/index.android.js create mode 100644 src/components/TextInputWithCurrencySymbol/index.js create mode 100644 src/components/TextInputWithCurrencySymbol/textInputWithCurrencySymbolPropTypes.js create mode 100644 src/components/categoryPropTypes.js create mode 100644 src/components/transactionPropTypes.js create mode 100644 src/hooks/useActiveElement/index.js create mode 100644 src/hooks/useActiveElement/index.native.js create mode 100644 src/hooks/useDefaultDragAndDrop/index.js rename src/{libs/getPlaidDesktopMessage/index.js => hooks/useDefaultDragAndDrop/index.native.js} (100%) create mode 100644 src/hooks/useSingleExecution.js create mode 100644 src/hooks/useWaitForNavigation.js delete mode 100644 src/libs/CardUtils.js create mode 100644 src/libs/CardUtils.ts delete mode 100644 src/libs/ComponentUtils/index.js delete mode 100644 src/libs/ComponentUtils/index.native.js create mode 100644 src/libs/ComponentUtils/index.native.ts create mode 100644 src/libs/ComponentUtils/index.ts create mode 100644 src/libs/ComponentUtils/types.ts create mode 100644 src/libs/ComposerFocusManager.js create mode 100644 src/libs/ComposerUtils/debouncedSaveReportComment.js create mode 100644 src/libs/ComposerUtils/getDraftComment.js create mode 100644 src/libs/DistanceRequestUtils.js rename src/libs/Errors/{HttpsError.js => HttpsError.ts} (59%) delete mode 100644 src/libs/MakeCancellablePromise.js delete mode 100644 src/libs/Navigation/AppNavigator/Navigators/FullScreenNavigator.js create mode 100644 src/libs/Navigation/AppNavigator/Navigators/Overlay.js rename src/libs/Navigation/AppNavigator/{createResponsiveStackNavigator => createCustomStackNavigator}/CustomRouter.js (97%) rename src/libs/Navigation/AppNavigator/{createResponsiveStackNavigator => createCustomStackNavigator}/index.js (77%) delete mode 100644 src/libs/Navigation/AppNavigator/createResponsiveStackNavigator/ThreePaneView.js create mode 100644 src/libs/Navigation/AppNavigator/getRootNavigatorScreenOptions.js delete mode 100644 src/libs/Navigation/currentUrl/index.js delete mode 100644 src/libs/Navigation/currentUrl/index.native.js create mode 100644 src/libs/Navigation/currentUrl/index.native.ts create mode 100644 src/libs/Navigation/currentUrl/index.ts create mode 100644 src/libs/Navigation/currentUrl/types.ts create mode 100644 src/libs/Navigation/shouldPreventDeeplinkPrompt/index.js create mode 100644 src/libs/Notification/PushNotification/subscribePushNotification/index.js rename src/libs/Notification/__mocks__/{LocalNotification.js => LocalNotification.ts} (71%) create mode 100644 src/libs/StringUtils.js create mode 100644 src/libs/SuggestionUtils.js create mode 100644 src/libs/actions/CanvasSize.js create mode 100644 src/libs/actions/DemoActions.js create mode 100644 src/libs/actions/DownloadAppModal.js create mode 100644 src/libs/actions/MemoryOnlyKeys/MemoryOnlyKeys.js create mode 100644 src/libs/actions/MemoryOnlyKeys/exposeGlobalMemoryOnlyKeysMethods/index.js create mode 100644 src/libs/actions/MemoryOnlyKeys/exposeGlobalMemoryOnlyKeysMethods/index.native.js create mode 100644 src/libs/actions/TeachersUnite.js rename src/libs/convertToLTR/{index.android.js => index.android.ts} (54%) delete mode 100644 src/libs/convertToLTR/index.js create mode 100644 src/libs/convertToLTR/index.ts create mode 100644 src/libs/convertToLTR/types.ts create mode 100644 src/libs/focusWithDelay.js delete mode 100644 src/libs/focusWithDelay/focusWithDelay.js delete mode 100644 src/libs/focusWithDelay/index.js delete mode 100644 src/libs/focusWithDelay/index.native.js rename src/libs/{getButtonState.js => getButtonState.ts} (56%) delete mode 100644 src/libs/getClickedTargetLocation/index.js delete mode 100644 src/libs/getClickedTargetLocation/index.native.js create mode 100644 src/libs/getClickedTargetLocation/index.native.ts create mode 100644 src/libs/getClickedTargetLocation/index.ts create mode 100644 src/libs/getClickedTargetLocation/types.ts rename src/libs/{getIsReportFullyVisible.js => getIsReportFullyVisible.ts} (63%) create mode 100644 src/libs/getModalState.js delete mode 100644 src/libs/getPlaidDesktopMessage/index.desktop.js create mode 100644 src/libs/getPlaidDesktopMessage/index.desktop.ts create mode 100644 src/libs/getPlaidDesktopMessage/index.ts create mode 100644 src/libs/getPlaidDesktopMessage/types.ts delete mode 100644 src/libs/getPlaidOAuthReceivedRedirectURI/index.native.js create mode 100644 src/libs/getPlaidOAuthReceivedRedirectURI/index.native.ts rename src/libs/getPlaidOAuthReceivedRedirectURI/{index.js => index.ts} (77%) create mode 100644 src/libs/getPlaidOAuthReceivedRedirectURI/types.ts delete mode 100644 src/libs/getPlatform/index.android.js create mode 100644 src/libs/getPlatform/index.android.ts delete mode 100644 src/libs/getPlatform/index.desktop.js create mode 100644 src/libs/getPlatform/index.desktop.ts delete mode 100644 src/libs/getPlatform/index.ios.js create mode 100644 src/libs/getPlatform/index.ios.ts create mode 100644 src/libs/getPlatform/index.ts delete mode 100644 src/libs/getPlatform/index.website.js create mode 100644 src/libs/getPlatform/types.ts delete mode 100644 src/libs/getWindowHeightAdjustment/index.android.js create mode 100644 src/libs/getWindowHeightAdjustment/index.android.ts delete mode 100644 src/libs/getWindowHeightAdjustment/index.js create mode 100644 src/libs/getWindowHeightAdjustment/index.ts create mode 100644 src/libs/getWindowHeightAdjustment/types.ts delete mode 100644 src/libs/isSelectorSupported/index.native.js create mode 100644 src/libs/isSelectorSupported/index.native.ts rename src/libs/isSelectorSupported/{index.js => index.ts} (54%) create mode 100644 src/libs/isSelectorSupported/types.ts delete mode 100644 src/libs/requireParameters.js create mode 100644 src/libs/requireParameters.ts delete mode 100644 src/libs/shouldDelayFocus/index.android.js create mode 100644 src/libs/shouldDelayFocus/index.android.ts create mode 100644 src/libs/shouldDelayFocus/index.ts create mode 100644 src/libs/shouldDelayFocus/types.ts rename src/libs/{useNativeDriver/index.native.js => shouldReopenOnfido/index.android.js} (100%) rename src/libs/{shouldDelayFocus => shouldReopenOnfido}/index.js (100%) delete mode 100644 src/libs/useNativeDriver/index.js create mode 100644 src/libs/useNativeDriver/index.native.ts create mode 100644 src/libs/useNativeDriver/index.ts create mode 100644 src/libs/useNativeDriver/types.ts create mode 100644 src/pages/DemoSetupPage.js create mode 100644 src/pages/EditRequestAmountPage.js create mode 100644 src/pages/EditRequestCreatedPage.js create mode 100644 src/pages/EditRequestMerchantPage.js create mode 100644 src/pages/TeachersUnite/ImTeacherPage.js create mode 100644 src/pages/TeachersUnite/IntroSchoolPrincipalPage.js create mode 100644 src/pages/TeachersUnite/KnowATeacherPage.js create mode 100644 src/pages/TeachersUnite/SaveTheWorldPage.js delete mode 100644 src/pages/home/report/ReportActionCompose.js create mode 100644 src/pages/home/report/ReportActionCompose/AttachmentPickerWithMenuItems.js create mode 100644 src/pages/home/report/ReportActionCompose/ComposerWithSuggestions.js create mode 100644 src/pages/home/report/ReportActionCompose/ReportActionCompose.js create mode 100644 src/pages/home/report/ReportActionCompose/SendButton.js create mode 100644 src/pages/home/report/ReportActionCompose/SilentCommentUpdater.js create mode 100644 src/pages/home/report/ReportActionCompose/SuggestionEmoji.js create mode 100644 src/pages/home/report/ReportActionCompose/SuggestionMention.js create mode 100644 src/pages/home/report/ReportActionCompose/Suggestions.js create mode 100644 src/pages/home/report/ReportActionCompose/composerWithSuggestionsProps.js create mode 100644 src/pages/home/report/ReportActionCompose/suggestionProps.js create mode 100644 src/pages/home/sidebar/AvatarWithOptionalStatus.js create mode 100644 src/pages/home/sidebar/PressableAvatarWithIndicator.js create mode 100644 src/pages/home/sidebar/SignInButton.js create mode 100644 src/pages/home/sidebar/SignInOrAvatarWithOptionalStatus.js create mode 100644 src/pages/iou/MoneyRequestCategoryPage.js create mode 100644 src/pages/iou/MoneyRequestDatePage.js create mode 100644 src/pages/iou/MoneyRequestMerchantPage.js create mode 100644 src/pages/iou/ReceiptSelector/NavigationAwareCamera.js create mode 100644 src/pages/iou/WaypointEditor.js create mode 100644 src/pages/iou/WaypointEditorPage.js create mode 100644 src/pages/iou/propTypes/index.js delete mode 100644 src/pages/settings/Payments/PaymentsPage/index.js delete mode 100644 src/pages/settings/Payments/PaymentsPage/index.native.js delete mode 100644 src/pages/settings/Security/TwoFactorAuth/CodesPage.js delete mode 100644 src/pages/settings/Security/TwoFactorAuth/DisablePage.js delete mode 100644 src/pages/settings/Security/TwoFactorAuth/IsEnabledPage.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/StepWrapper/StepWrapper.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/StepWrapper/StepWrapperPropTypes.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/Steps/CodesStep.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/Steps/DisabledStep.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/Steps/EnabledStep.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/Steps/SuccessStep.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/Steps/VerifyStep.js delete mode 100644 src/pages/settings/Security/TwoFactorAuth/SuccessPage.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/TwoFactorAuthContext/index.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/TwoFactorAuthContext/useTwoFactorAuth.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/TwoFactorAuthPage.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/TwoFactorAuthPropTypes.js create mode 100644 src/pages/settings/Security/TwoFactorAuth/TwoFactorAuthSteps.js delete mode 100644 src/pages/settings/Security/TwoFactorAuth/VerifyPage.js rename src/pages/settings/{Payments => Wallet}/AddDebitCardPage.js (84%) rename src/pages/settings/{Payments => Wallet}/AddPayPalMePage.js (88%) rename src/pages/settings/{Payments => Wallet}/ChooseTransferAccountPage.js (97%) rename src/pages/settings/{Payments => Wallet}/PaymentMethodList.js (92%) rename src/pages/settings/{Payments => Wallet}/TransferBalancePage.js (96%) rename src/pages/settings/{Payments/PaymentsPage/BasePaymentsPage.js => Wallet/WalletPage/BaseWalletPage.js} (88%) create mode 100644 src/pages/settings/Wallet/WalletPage/index.js create mode 100644 src/pages/settings/Wallet/WalletPage/index.native.js rename src/pages/settings/{Payments/PaymentsPage/paymentsPagePropTypes.js => Wallet/WalletPage/walletPagePropTypes.js} (93%) rename src/pages/settings/{Payments => Wallet}/walletTransferPropTypes.js (100%) create mode 100644 src/pages/signin/AppleSignInDesktopPage/index.js create mode 100644 src/pages/signin/AppleSignInDesktopPage/index.website.js create mode 100644 src/pages/signin/DesktopRedirectPage.js create mode 100644 src/pages/signin/DesktopSignInRedirectPage/index.js create mode 100644 src/pages/signin/DesktopSignInRedirectPage/index.website.js create mode 100644 src/pages/signin/GoogleSignInDesktopPage/index.js create mode 100644 src/pages/signin/GoogleSignInDesktopPage/index.website.js rename src/pages/signin/{LoginForm.js => LoginForm/BaseLoginForm.js} (68%) create mode 100644 src/pages/signin/LoginForm/index.js create mode 100644 src/pages/signin/LoginForm/index.native.js create mode 100644 src/pages/signin/SignInModal.js create mode 100644 src/pages/signin/ThirdPartySignInPage.js create mode 100644 src/stories/SelectionList.stories.js delete mode 100644 src/stories/SelectionListRadio.stories.js rename src/styles/{StyleUtils.js => StyleUtils.ts} (66%) rename src/styles/{ThemeStylesContext.js => ThemeStylesContext.ts} (100%) delete mode 100644 src/styles/addOutlineWidth/index.js delete mode 100644 src/styles/addOutlineWidth/index.native.js create mode 100644 src/styles/addOutlineWidth/index.native.ts create mode 100644 src/styles/addOutlineWidth/index.ts create mode 100644 src/styles/addOutlineWidth/types.ts delete mode 100644 src/styles/codeStyles/index.android.js create mode 100644 src/styles/codeStyles/index.android.ts delete mode 100644 src/styles/codeStyles/index.ios.js create mode 100644 src/styles/codeStyles/index.ios.ts delete mode 100644 src/styles/codeStyles/index.js create mode 100644 src/styles/codeStyles/index.ts create mode 100644 src/styles/codeStyles/types.ts delete mode 100644 src/styles/editedLabelStyles/index.js delete mode 100644 src/styles/editedLabelStyles/index.native.js create mode 100644 src/styles/editedLabelStyles/index.native.ts create mode 100644 src/styles/editedLabelStyles/index.ts create mode 100644 src/styles/editedLabelStyles/types.ts rename src/styles/fontFamily/{index.native.js => index.native.ts} (86%) rename src/styles/fontFamily/{index.js => index.ts} (91%) create mode 100644 src/styles/fontFamily/types.ts rename src/styles/{getModalStyles/getBaseModalStyles.js => getModalStyles.ts} (81%) delete mode 100644 src/styles/getModalStyles/index.js delete mode 100644 src/styles/getNavigationModalCardStyles/getBaseNavigationModalCardStyles.js rename src/styles/getNavigationModalCardStyles/{index.website.js => index.desktop.js} (63%) delete mode 100644 src/styles/getNavigationModalCardStyles/index.js create mode 100644 src/styles/getNavigationModalCardStyles/index.ts create mode 100644 src/styles/getNavigationModalCardStyles/index.website.ts create mode 100644 src/styles/getNavigationModalCardStyles/types.ts rename src/styles/getPopOverVerticalOffset/{index.desktop.js => index.desktop.ts} (51%) delete mode 100644 src/styles/getPopOverVerticalOffset/index.js create mode 100644 src/styles/getPopOverVerticalOffset/index.ts create mode 100644 src/styles/getPopOverVerticalOffset/types.ts rename src/styles/{getPopoverWithMeasuredContentStyles.js => getPopoverWithMeasuredContentStyles.ts} (74%) rename src/styles/{getReportActionContextMenuStyles.js => getReportActionContextMenuStyles.ts} (66%) delete mode 100644 src/styles/italic/index.android.js create mode 100644 src/styles/italic/index.android.ts delete mode 100644 src/styles/italic/index.js create mode 100644 src/styles/italic/index.ts create mode 100644 src/styles/italic/types.ts delete mode 100644 src/styles/optionAlternateTextPlatformStyles/index.ios.js create mode 100644 src/styles/optionAlternateTextPlatformStyles/index.ios.ts delete mode 100644 src/styles/optionAlternateTextPlatformStyles/index.js create mode 100644 src/styles/optionAlternateTextPlatformStyles/index.ts create mode 100644 src/styles/optionAlternateTextPlatformStyles/types.ts rename src/styles/optionRowStyles/{index.native.js => index.native.ts} (76%) rename src/styles/optionRowStyles/{index.js => index.ts} (53%) create mode 100644 src/styles/optionRowStyles/types.ts delete mode 100644 src/styles/overflowXHidden/index.js delete mode 100644 src/styles/overflowXHidden/index.native.js create mode 100644 src/styles/overflowXHidden/index.native.ts create mode 100644 src/styles/overflowXHidden/index.ts create mode 100644 src/styles/overflowXHidden/types.ts delete mode 100644 src/styles/pointerEventsAuto/index.js delete mode 100644 src/styles/pointerEventsAuto/index.native.js create mode 100644 src/styles/pointerEventsAuto/index.native.ts create mode 100644 src/styles/pointerEventsAuto/index.ts create mode 100644 src/styles/pointerEventsAuto/types.ts delete mode 100644 src/styles/pointerEventsNone/index.js delete mode 100644 src/styles/pointerEventsNone/index.native.js create mode 100644 src/styles/pointerEventsNone/index.native.ts create mode 100644 src/styles/pointerEventsNone/index.ts create mode 100644 src/styles/pointerEventsNone/types.ts rename src/styles/{roundToNearestMultipleOfFour.js => roundToNearestMultipleOfFour.ts} (79%) rename src/styles/utilities/cursor/{index.native.js => index.native.ts} (72%) rename src/styles/utilities/cursor/{index.js => index.ts} (86%) create mode 100644 src/styles/utilities/cursor/types.ts rename src/styles/utilities/{flex.js => flex.ts} (93%) rename src/styles/utilities/{overflow.js => overflow.ts} (72%) delete mode 100644 src/styles/utilities/overflowAuto/index.js delete mode 100644 src/styles/utilities/overflowAuto/index.native.js create mode 100644 src/styles/utilities/overflowAuto/index.native.ts create mode 100644 src/styles/utilities/overflowAuto/index.ts create mode 100644 src/styles/utilities/overflowAuto/types.ts rename src/styles/utilities/{positioning.js => positioning.ts} (89%) rename src/styles/utilities/{sizing.js => sizing.ts} (90%) delete mode 100644 src/styles/utilities/textUnderline/index.js delete mode 100644 src/styles/utilities/textUnderline/index.native.js create mode 100644 src/styles/utilities/textUnderline/index.native.ts create mode 100644 src/styles/utilities/textUnderline/index.ts create mode 100644 src/styles/utilities/textUnderline/types.ts rename src/styles/utilities/userSelect/{index.native.js => index.native.ts} (52%) rename src/styles/utilities/userSelect/{index.js => index.ts} (63%) create mode 100644 src/styles/utilities/userSelect/types.ts delete mode 100644 src/styles/utilities/visibility/index.js delete mode 100644 src/styles/utilities/visibility/index.native.js create mode 100644 src/styles/utilities/visibility/index.native.ts create mode 100644 src/styles/utilities/visibility/index.ts create mode 100644 src/styles/utilities/visibility/types.ts delete mode 100644 src/styles/utilities/whiteSpace/index.native.js create mode 100644 src/styles/utilities/whiteSpace/index.native.ts rename src/styles/utilities/whiteSpace/{index.js => index.ts} (58%) create mode 100644 src/styles/utilities/whiteSpace/types.ts delete mode 100644 src/styles/utilities/wordBreak/index.native.js create mode 100644 src/styles/utilities/wordBreak/index.native.ts rename src/styles/utilities/wordBreak/{index.js => index.ts} (52%) create mode 100644 src/styles/utilities/wordBreak/types.ts rename src/styles/utilities/{writingDirection.js => writingDirection.ts} (80%) rename src/styles/{variables.js => variables.ts} (95%) rename src/{ => types}/global.d.ts (99%) create mode 100644 src/types/modules/react-native-key-command.d.ts create mode 100644 src/types/modules/react-native-onyx.d.ts create mode 100644 src/types/onyx/Account.ts create mode 100644 src/types/onyx/BankAccount.ts create mode 100644 src/types/onyx/Beta.ts create mode 100644 src/types/onyx/BlockedFromConcierge.ts create mode 100644 src/types/onyx/Card.ts create mode 100644 src/types/onyx/Credentials.ts create mode 100644 src/types/onyx/Currency.ts create mode 100644 src/types/onyx/CustomStatusDraft.ts create mode 100644 src/types/onyx/Download.ts create mode 100644 src/types/onyx/Form.ts create mode 100644 src/types/onyx/FrequentlyUsedEmoji.ts create mode 100644 src/types/onyx/Fund.ts create mode 100644 src/types/onyx/IOU.ts create mode 100644 src/types/onyx/Login.ts create mode 100644 src/types/onyx/MapboxAccessToken.ts create mode 100644 src/types/onyx/Modal.ts create mode 100644 src/types/onyx/Network.ts create mode 100644 src/types/onyx/OnyxCommon.ts create mode 100644 src/types/onyx/OriginalMessage.ts create mode 100644 src/types/onyx/Paypal.ts create mode 100644 src/types/onyx/PersonalBankAccount.ts create mode 100644 src/types/onyx/PersonalDetails.ts create mode 100644 src/types/onyx/PlaidBankAccount.ts create mode 100644 src/types/onyx/PlaidData.ts create mode 100644 src/types/onyx/Policy.ts create mode 100644 src/types/onyx/PolicyMember.ts create mode 100644 src/types/onyx/PrivatePersonalDetails.ts create mode 100644 src/types/onyx/QueuedOnyxUpdates.ts create mode 100644 src/types/onyx/ReceiptModal.ts create mode 100644 src/types/onyx/RecentWaypoints.ts create mode 100644 src/types/onyx/ReimbursementAccount.ts create mode 100644 src/types/onyx/ReimbursementAccountDraft.ts create mode 100644 src/types/onyx/Report.ts create mode 100644 src/types/onyx/ReportAction.ts create mode 100644 src/types/onyx/ReportActionReactions.ts create mode 100644 src/types/onyx/Request.ts create mode 100644 src/types/onyx/ScreenShareRequest.ts create mode 100644 src/types/onyx/SecurityGroup.ts create mode 100644 src/types/onyx/Session.ts create mode 100644 src/types/onyx/Task.ts create mode 100644 src/types/onyx/Transaction.ts create mode 100644 src/types/onyx/User.ts create mode 100644 src/types/onyx/UserWallet.ts create mode 100644 src/types/onyx/WalletAdditionalDetails.ts create mode 100644 src/types/onyx/WalletOnfido.ts create mode 100644 src/types/onyx/WalletStatement.ts create mode 100644 src/types/onyx/WalletTerms.ts create mode 100644 src/types/onyx/WalletTransfer.ts create mode 100644 src/types/onyx/index.ts create mode 100644 src/types/utils/DeepValueOf.ts create mode 100644 tests/perf-test/SelectionList.perf-test.js delete mode 100644 tests/perf-test/SelectionListRadio.perf-test.js create mode 100644 tests/unit/markPullRequestsAsDeployedTest.js diff --git a/.eslintrc.js b/.eslintrc.js index ec55f16b2832..22b94d79e369 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -163,5 +163,13 @@ module.exports = { ], }, }, + { + files: ['tests/**/*.{js,jsx,ts,tsx}', '.github/**/*.{js,jsx,ts,tsx}'], + rules: { + '@lwc/lwc/no-async-await': 'off', + 'no-await-in-loop': 'off', + 'no-restricted-syntax': ['error', 'ForInStatement', 'LabeledStatement', 'WithStatement'], + }, + }, ], }; diff --git a/.github/actions/composite/setupNode/action.yml b/.github/actions/composite/setupNode/action.yml index 6bdf500912c0..57c7e4d91379 100644 --- a/.github/actions/composite/setupNode/action.yml +++ b/.github/actions/composite/setupNode/action.yml @@ -16,13 +16,13 @@ runs: uses: actions/cache@v3 with: path: node_modules - key: ${{ runner.os }}-node-modules-${{ hashFiles('package-lock.json') }} + key: ${{ runner.os }}-node-modules-${{ hashFiles('package-lock.json', 'patches/**') }} - id: cache-desktop-node-modules uses: actions/cache@v3 with: path: desktop/node_modules - key: ${{ runner.os }}-desktop-node-modules-${{ hashFiles('desktop/package-lock.json') }} + key: ${{ runner.os }}-desktop-node-modules-${{ hashFiles('desktop/package-lock.json', 'desktop/patches/**') }} - name: Install root project node packages if: steps.cache-node-modules.outputs.cache-hit != 'true' diff --git a/.github/actions/javascript/authorChecklist/index.js b/.github/actions/javascript/authorChecklist/index.js index 4276ea0ba6fc..b165c285143f 100644 --- a/.github/actions/javascript/authorChecklist/index.js +++ b/.github/actions/javascript/authorChecklist/index.js @@ -105,7 +105,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -539,7 +539,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16117,1066 +16117,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17185,19 +17250,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17208,34 +17282,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17245,15 +17333,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17276,31 +17369,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17315,9 +17430,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17326,6 +17446,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17334,6 +17457,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17343,10 +17467,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17364,32 +17492,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17426,7 +17575,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17480,7 +17629,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17489,14 +17638,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17504,11 +17657,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17517,13 +17671,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17535,6 +17696,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17553,26 +17719,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17580,12 +17762,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17598,11 +17780,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17610,31 +17797,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17682,6 +17883,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17720,13 +17925,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17734,6 +17943,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17747,6 +17957,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17756,6 +17967,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17769,9 +17981,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17783,11 +18003,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17796,18 +18020,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17815,10 +18049,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17830,7 +18069,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17840,29 +18079,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17870,7 +18132,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17883,10 +18145,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17896,12 +18163,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17921,12 +18193,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17938,15 +18220,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17955,10 +18247,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17967,20 +18264,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17995,25 +18304,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18033,12 +18356,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18058,6 +18387,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18067,21 +18405,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18093,11 +18438,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18119,6 +18472,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18132,53 +18489,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18187,545 +18571,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/awaitStagingDeploys/index.js b/.github/actions/javascript/awaitStagingDeploys/index.js index bc8510ba5bc6..b2db5f0542ea 100644 --- a/.github/actions/javascript/awaitStagingDeploys/index.js +++ b/.github/actions/javascript/awaitStagingDeploys/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 1021: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const CONST = __nccwpck_require__(4097); const ActionUtils = __nccwpck_require__(970); const GitHubUtils = __nccwpck_require__(7999); @@ -143,7 +143,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -577,7 +577,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16158,1066 +16158,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17226,19 +17291,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17249,34 +17323,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17286,15 +17374,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17317,31 +17410,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17356,9 +17471,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17367,6 +17487,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17375,6 +17498,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17384,10 +17508,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17405,32 +17533,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17467,7 +17616,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17521,7 +17670,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17530,14 +17679,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17545,11 +17698,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17558,13 +17712,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17576,6 +17737,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17594,26 +17760,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17621,12 +17803,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17639,11 +17821,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17651,31 +17838,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17723,6 +17924,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17761,13 +17966,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17775,6 +17984,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17788,6 +17998,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17797,6 +18008,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17810,9 +18022,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17824,11 +18044,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17837,18 +18061,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17856,10 +18090,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17871,7 +18110,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17881,29 +18120,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17911,7 +18173,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17924,10 +18186,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17937,12 +18204,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17962,12 +18234,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17979,15 +18261,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17996,10 +18288,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18008,20 +18305,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18036,25 +18345,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18074,12 +18397,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18099,6 +18428,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18108,21 +18446,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18134,11 +18479,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18160,6 +18513,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18173,53 +18530,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18228,545 +18612,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/bumpVersion/index.js b/.github/actions/javascript/bumpVersion/index.js index f780e50a4587..830dbf626548 100644 --- a/.github/actions/javascript/bumpVersion/index.js +++ b/.github/actions/javascript/bumpVersion/index.js @@ -11,7 +11,7 @@ module.exports = const {promisify} = __nccwpck_require__(669); const fs = __nccwpck_require__(747); const exec = promisify(__nccwpck_require__(129).exec); -const _ = __nccwpck_require__(571); +const _ = __nccwpck_require__(947); const core = __nccwpck_require__(186); const versionUpdater = __nccwpck_require__(7); const {updateAndroidVersion, updateiOSVersion, generateAndroidVersionCode} = __nccwpck_require__(322); @@ -178,7 +178,7 @@ exports.updateiOSVersion = function updateiOSVersion(version) { /***/ 7: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(571); +const _ = __nccwpck_require__(947); const SEMANTIC_VERSION_LEVELS = { MAJOR: 'MAJOR', @@ -3068,8 +3068,8 @@ exports.debug = debug; // for test /***/ }), -/***/ 521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +/***/ 947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; // ESM COMPAT FLAG @@ -3077,636 +3077,672 @@ __nccwpck_require__.r(__webpack_exports__); // EXPORTS __nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip }); -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - return rnds8Pool.slice(poolPtr, poolPtr += 16); -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); -} +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -const byteToHex = []; +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return uuid; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; +} -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; +} - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +/* harmony default export */ const isString = (tagTester('String')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +/* harmony default export */ const isNumber = (tagTester('Number')); - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isDate = (tagTester('Date')); - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +/* harmony default export */ const isError = (tagTester('Error')); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +/* harmony default export */ const isSymbol = (tagTester('Symbol')); - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - b[i++] = clockseq & 0xff; // `node` - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - return buf || esm_node_stringify(b); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +var isFunction = tagTester('Function'); - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ +/* harmony default export */ const modules_isFunction = (isFunction); - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - const bytes = []; - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - return bytes; -} -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` - - - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - - if (buf) { - offset = offset || 0; - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +var isDataView = tagTester('DataView'); - return buf; - } +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); +} - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('md5').update(bytes).digest(); +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +var isArguments = tagTester('Arguments'); -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +/* harmony default export */ const modules_isArguments = (isArguments); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); } -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('sha1').update(bytes).digest(); +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } - - return parseInt(uuid.substr(14, 1), 16); } -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js -/***/ }), -/***/ 641: -/***/ ((__unused_webpack_module, exports) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -Object.defineProperty(exports, "__esModule", ({ value: true })); -// Current version. -var VERSION = '1.13.4'; +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); } - args[startIndex] = rest; - return func.apply(this, args); }; } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} - -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} - -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} - -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } } -var isString = tagTester('String'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); - -var isSymbol = tagTester('Symbol'); - -var isArrayBuffer = tagTester('ArrayBuffer'); - -var isFunction = tagTester('Function'); - -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} - -var isFunction$1 = isFunction; - -var hasObjectTag = tagTester('Object'); - -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); - -var isDataView = tagTester('DataView'); - -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); -} - -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); - -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); - -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); -} - -var isArguments = tagTester('Arguments'); - -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); - -var isArguments$1 = isArguments; - -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} - -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; - }; -} - -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; - } -} - -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; -} - -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); - -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); - -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); -} - -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); - -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); - -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); - } - }; -} - -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} // Retrieve the names of an object's own properties. // Delegates to **ECMAScript 5**'s native `Object.keys`. @@ -3714,25 +3750,35 @@ function keys(obj) { if (!isObject(obj)) return []; if (nativeKeys) return nativeKeys(obj); var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); + for (var key in obj) if (has(obj, key)) keys.push(key); // Ahem, IE < 9. if (hasEnumBug) collectNonEnumProps(obj, keys); return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js + + + + + + // Is a given array, string, or object empty? // An "empty" object has no enumerable own-properties. function isEmpty(obj) { if (obj == null) return true; // Skip the more expensive `toString`-based type checks if `obj` has no // `.length`. - var length = getLength(obj); + var length = _getLength(obj); if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) + isArray(obj) || isString(obj) || modules_isArguments(obj) )) return length === 0; - return getLength(keys(obj)) === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js + + // Returns whether an object has a given set of `key:value` pairs. function isMatch(object, attrs) { var _keys = keys(attrs), length = _keys.length; @@ -3745,40 +3791,58 @@ function isMatch(object, attrs) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js + + // If Underscore is called as a function, it returns a wrapped object that can // be used OO-style. This wrapper holds altered versions of all functions added // through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); this._wrapped = obj; } -_$1.VERSION = VERSION; +_.VERSION = VERSION; // Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { +_.prototype.value = function() { return this._wrapped; }; // Provide unwrapping proxies for some methods used in engine operations // such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -_$1.prototype.toString = function() { +_.prototype.toString = function() { return String(this._wrapped); }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js + + // Internal function to wrap or shallow-copy an ArrayBuffer, // typed array or DataView to a new view, reusing the buffer. function toBufferView(bufferSource) { return new Uint8Array( bufferSource.buffer || bufferSource, bufferSource.byteOffset || 0, - getByteLength(bufferSource) + _getByteLength(bufferSource) ); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js + + + + + + + + + + + // We use this string twice, so give it a name for minification. var tagDataView = '[object DataView]'; @@ -3800,14 +3864,14 @@ function eq(a, b, aStack, bStack) { // Internal recursive comparison function for `_.isEqual`. function deepEq(a, b, aStack, bStack) { // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; className = tagDataView; } switch (className) { @@ -3839,9 +3903,9 @@ function deepEq(a, b, aStack, bStack) { } var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; areArrays = true; } @@ -3851,8 +3915,8 @@ function deepEq(a, b, aStack, bStack) { // Objects with different constructors are not equivalent, but `Object`s or `Array`s // from different frames are. var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) && ('constructor' in a && 'constructor' in b)) { return false; } @@ -3893,7 +3957,7 @@ function deepEq(a, b, aStack, bStack) { while (length--) { // Deep compare each member key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; } } // Remove the first object from the stack of traversed objects. @@ -3907,6 +3971,11 @@ function isEqual(a, b) { return eq(a, b); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js + + + + // Retrieve all the enumerable property names of an object. function allKeys(obj) { if (!isObject(obj)) return []; @@ -3917,24 +3986,29 @@ function allKeys(obj) { return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js + + + + // Since the regular `Object.prototype.toString` type tests don't work for // some types in IE 11, we use a fingerprinting heuristic instead, based // on the methods. It's not great, but it's the best we got. // The fingerprint method lists are defined below. function ie11fingerprint(methods) { - var length = getLength(methods); + var length = _getLength(methods); return function(obj) { if (obj == null) return false; // `Map`, `WeakMap` and `Set` have no enumerable keys. var keys = allKeys(obj); - if (getLength(keys)) return false; + if (_getLength(keys)) return false; for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; + if (!modules_isFunction(obj[methods[i]])) return false; } // If we are testing against `WeakMap`, we need to ensure that // `obj` doesn't have a `forEach` method in order to distinguish // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } @@ -3951,13 +4025,34 @@ var mapMethods = commonInit.concat(forEachName, mapTail), weakMapMethods = commonInit.concat(mapTail), setMethods = ['add'].concat(commonInit, forEachName, hasName); -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js -var isWeakSet = tagTester('WeakSet'); // Retrieve the values of an object's properties. function values(obj) { @@ -3970,6 +4065,9 @@ function values(obj) { return values; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + // Convert an object into a list of `[key, value]` pairs. // The opposite of `_.object` with one argument. function pairs(obj) { @@ -3982,6 +4080,9 @@ function pairs(obj) { return pairs; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js + + // Invert the keys and values of an object. The values must be serializable. function invert(obj) { var result = {}; @@ -3992,15 +4093,19 @@ function invert(obj) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js + + // Return a sorted list of the function names available on the object. function functions(obj) { var names = []; for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); + if (modules_isFunction(obj[key])) names.push(key); } return names.sort(); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js // An internal function for creating assigner functions. function createAssigner(keysFunc, defaults) { return function(obj) { @@ -4020,16 +4125,32 @@ function createAssigner(keysFunc, defaults) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js + + + // Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); +/* harmony default export */ const extend = (createAssigner(allKeys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js + + // Assigns a given object with all the own properties in the passed-in // object(s). // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + // Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + // Create a naked function reference for surrogate-prototype-swapping. function ctor() { @@ -4047,6 +4168,10 @@ function baseCreate(prototype) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js + + + // Creates an object that inherits from the given prototype object. // If additional properties are provided then they will be added to the // created object. @@ -4056,12 +4181,18 @@ function create(prototype, props) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js + + + + // Create a (shallow-cloned) duplicate of an object. function clone(obj) { if (!isObject(obj)) return obj; return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -4070,19 +4201,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -4093,34 +4233,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -4130,15 +4284,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -4161,31 +4320,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -4200,9 +4381,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -4211,6 +4397,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -4219,6 +4408,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -4228,10 +4418,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -4249,32 +4443,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + + +// Function for unescaping strings from HTML interpolation. +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js -// Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -4311,7 +4526,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -4365,7 +4580,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -4374,14 +4589,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -4389,11 +4608,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -4402,13 +4622,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -4420,6 +4647,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -4438,26 +4670,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -4465,12 +4713,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -4483,11 +4731,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -4495,31 +4748,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -4567,6 +4834,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -4605,13 +4876,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -4619,6 +4894,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -4632,6 +4908,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -4641,6 +4918,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -4654,9 +4932,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -4668,11 +4954,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -4681,18 +4971,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -4700,10 +5000,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -4715,7 +5020,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -4725,29 +5030,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -4755,7 +5083,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -4768,10 +5096,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -4781,12 +5114,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -4806,12 +5144,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -4823,15 +5171,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -4840,10 +5198,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -4852,20 +5215,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -4880,25 +5255,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -4918,12 +5307,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -4943,6 +5338,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -4952,21 +5356,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -4978,11 +5389,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -5004,6 +5423,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -5017,53 +5440,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -5072,22 +5522,34 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + // Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in @@ -5096,6 +5558,9 @@ function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + // Get the first element of an array. Passing **n** will return the first N // values in the array. The **guard** check allows it to work with `_.map`. function first(array, n, guard) { @@ -5104,6 +5569,9 @@ function first(array, n, guard) { return initial(array, array.length - n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + // Returns everything but the first entry of the `array`. Especially useful on // the `arguments` object. Passing an **n** will return the rest N values in the // `array`. @@ -5111,6 +5579,9 @@ function rest(array, n, guard) { return slice.call(array, n == null || guard ? 1 : n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + // Get the last element of an array. Passing **n** will return the last N // values in the array. function last(array, n, guard) { @@ -5119,30 +5590,52 @@ function last(array, n, guard) { return rest(array, Math.max(0, array.length - n)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + // Trim out all falsy values from an array. function compact(array) { return filter(array, Boolean); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + // Flatten out an array, either recursively (by default), or up to `depth`. // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); +function flatten_flatten(array, depth) { + return flatten(array, depth, false); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + // Take the difference between one array and a number of other arrays. // Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); return filter(array, function(value){ return !contains(rest, value); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + // Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { return difference(array, otherArrays); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + // Produce a duplicate-free version of the array. If the array has already // been sorted, you have the option of using a faster algorithm. @@ -5158,7 +5651,7 @@ function uniq(array, isSorted, iteratee, context) { if (iteratee != null) iteratee = cb(iteratee, context); var result = []; var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var value = array[i], computed = iteratee ? iteratee(value, i, array) : value; if (isSorted && !iteratee) { @@ -5176,18 +5669,27 @@ function uniq(array, isSorted, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + // Produce an array that contains the union: each distinct element from all of // the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + // Produce an array that contains every item shared between all the // passed-in arrays. function intersection(array) { var result = []; var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var item = array[i]; if (contains(result, item)) continue; var j; @@ -5199,10 +5701,15 @@ function intersection(array) { return result; } -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; var result = Array(length); for (var index = 0; index < length; index++) { @@ -5211,16 +5718,23 @@ function unzip(array) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + // Zip together multiple lists into a single array -- elements that share // an index go together. -var zip = restArguments(unzip); +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + // Converts lists into objects. Pass either a single array of `[key, value]` // pairs, or two parallel arrays of the same length -- one of keys, and one of // the corresponding values. Passing by pairs is the reverse of `_.pairs`. function object(list, values) { var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { + for (var i = 0, length = _getLength(list); i < length; i++) { if (values) { result[list[i]] = values[i]; } else { @@ -5230,6 +5744,7 @@ function object(list, values) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js // Generate an integer Array containing an arithmetic progression. A port of // the native Python `range()` function. See // [the Python documentation](https://docs.python.org/library/functions.html#range). @@ -5252,6 +5767,9 @@ function range(start, stop, step) { return range; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + // Chunk a single array into multiple arrays, each containing `count` or fewer // items. function chunk(array, count) { @@ -5264,28 +5782,44 @@ function chunk(array, count) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + // Helper function to continue chaining intermediate results. function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return instance._chain ? _(obj).chain() : obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + // Add your own custom functions to the Underscore object. function mixin(obj) { each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { + var func = _[name] = obj[name]; + _.prototype[name] = function() { var args = [this._wrapped]; push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); + return chainResult(this, func.apply(_, args)); }; }); - return _$1; + return _; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + // Add all mutator `Array` functions to the wrapper. each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) { method.apply(obj, arguments); @@ -5300,317 +5834,609 @@ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function( // Add all accessor `Array` functions to the wrapper. each(['concat', 'join', 'slice'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) obj = method.apply(obj, arguments); return chainResult(this, obj); }; }); +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js // Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js // Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + // Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); +var index_default_ = mixin(modules_namespaceObject); // Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + /***/ }), -/***/ 571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js + + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('md5').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js + + +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js + + + +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return esm_node_stringify(rnds); +} + +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + + -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -var underscoreNodeF = __nccwpck_require__(641); -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map /***/ }), diff --git a/.github/actions/javascript/checkDeployBlockers/index.js b/.github/actions/javascript/checkDeployBlockers/index.js index ca368f0cff29..c1fb62db00ac 100644 --- a/.github/actions/javascript/checkDeployBlockers/index.js +++ b/.github/actions/javascript/checkDeployBlockers/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 6265: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const CONST = __nccwpck_require__(4097); const GithubUtils = __nccwpck_require__(7999); @@ -110,7 +110,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -544,7 +544,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16078,1066 +16078,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17146,19 +17211,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17169,34 +17243,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17206,15 +17294,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17237,31 +17330,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17276,9 +17391,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17287,6 +17407,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17295,6 +17418,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17304,10 +17428,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17325,32 +17453,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17387,7 +17536,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17441,7 +17590,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17450,14 +17599,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17465,11 +17618,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17478,13 +17632,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17496,6 +17657,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17514,26 +17680,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17541,12 +17723,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17559,11 +17741,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17571,31 +17758,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17643,6 +17844,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17681,13 +17886,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17695,6 +17904,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17708,6 +17918,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17717,6 +17928,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17730,9 +17942,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17744,11 +17964,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17757,18 +17981,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17776,10 +18010,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17791,7 +18030,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17801,29 +18040,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17831,7 +18093,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17844,10 +18106,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17857,12 +18124,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17882,12 +18154,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17899,15 +18181,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17916,10 +18208,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17928,20 +18225,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17956,25 +18265,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17994,12 +18317,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18019,6 +18348,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18028,21 +18366,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18054,11 +18399,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18080,6 +18433,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18093,53 +18450,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18148,545 +18532,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.js b/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.js index a514f8a9bcab..82a79528ed09 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.js +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.js @@ -5,167 +5,138 @@ const CONST = require('../../../libs/CONST'); const GithubUtils = require('../../../libs/GithubUtils'); const GitUtils = require('../../../libs/GitUtils'); -const run = function () { +async function run() { const newVersion = core.getInput('NPM_VERSION'); console.log('New version found from action input:', newVersion); - let shouldCreateNewStagingDeployCash = false; - let newTag = newVersion; - let newDeployBlockers = []; - let previousStagingDeployCashData = {}; - let currentStagingDeployCashData = null; - - // Start by fetching the list of recent StagingDeployCash issues, along with the list of open deploy blockers - return Promise.all([ - GithubUtils.octokit.issues.listForRepo({ + try { + // Start by fetching the list of recent StagingDeployCash issues, along with the list of open deploy blockers + const {data: recentDeployChecklists} = await GithubUtils.octokit.issues.listForRepo({ log: console, owner: CONST.GITHUB_OWNER, repo: CONST.APP_REPO, labels: CONST.LABELS.STAGING_DEPLOY, state: 'all', - }), - GithubUtils.octokit.issues.listForRepo({ - log: console, - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - labels: CONST.LABELS.DEPLOY_BLOCKER, - }), - ]) - .then(([stagingDeployResponse, deployBlockerResponse]) => { - if (!stagingDeployResponse || !stagingDeployResponse.data || _.isEmpty(stagingDeployResponse.data)) { - console.error('Failed fetching StagingDeployCash issues from Github!', stagingDeployResponse); - throw new Error('Failed fetching StagingDeployCash issues from Github'); - } - - if (!deployBlockerResponse || !deployBlockerResponse.data) { - console.log('Failed fetching DeployBlockerCash issues from Github, continuing...'); - } - - newDeployBlockers = _.map(deployBlockerResponse.data, ({html_url}) => ({ - url: html_url, - number: GithubUtils.getIssueOrPullRequestNumberFromURL(html_url), - isResolved: false, - })); - - // Look at the state of the most recent StagingDeployCash, - // if it is open then we'll update the existing one, otherwise, we'll create a new one. - shouldCreateNewStagingDeployCash = Boolean(stagingDeployResponse.data[0].state !== 'open'); - if (shouldCreateNewStagingDeployCash) { - console.log('Latest StagingDeployCash is closed, creating a new one.', stagingDeployResponse.data[0]); - } else { - console.log( - 'Latest StagingDeployCash is open, updating it instead of creating a new one.', - 'Current:', - stagingDeployResponse.data[0], - 'Previous:', - stagingDeployResponse.data[1], - ); - } - - // Parse the data from the previous StagingDeployCash - // (newest if there are none open, otherwise second-newest) - previousStagingDeployCashData = shouldCreateNewStagingDeployCash - ? GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[0]) - : GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[1]); - - console.log('Found tag of previous StagingDeployCash:', previousStagingDeployCashData.tag); - - // Find the list of PRs merged between the last StagingDeployCash and the new version - if (shouldCreateNewStagingDeployCash) { - return GitUtils.getPullRequestsMergedBetween(previousStagingDeployCashData.tag, newTag); - } - - currentStagingDeployCashData = GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[0]); - console.log('Parsed the following data from the current StagingDeployCash:', currentStagingDeployCashData); - - // If we aren't sent a tag, then use the existing tag - newTag = newTag || currentStagingDeployCashData.tag; - - return GitUtils.getPullRequestsMergedBetween(previousStagingDeployCashData.tag, newTag); - }) - .then((mergedPRs) => { - console.log(`The following PRs have been merged between the previous StagingDeployCash (${previousStagingDeployCashData.tag}) and new version (${newVersion}):`, mergedPRs); - - if (shouldCreateNewStagingDeployCash) { - return GithubUtils.generateStagingDeployCashBody(newTag, _.map(mergedPRs, GithubUtils.getPullRequestURLFromNumber)); - } - - const didVersionChange = newVersion ? newVersion !== currentStagingDeployCashData.tag : false; - - // Generate the PR list, preserving the previous state of `isVerified` for existing PRs - const PRList = _.sortBy( - _.unique( - _.union( - currentStagingDeployCashData.PRList, - _.map(mergedPRs, (number) => ({ - number: Number.parseInt(number, 10), - url: GithubUtils.getPullRequestURLFromNumber(number), + }); - // Since this is the second argument to _.union, - // it will appear later in the array than any duplicate. - // Since it is later in the array, it will be truncated by _.unique, - // and the original value of isVerified will be preserved. - isVerified: false, - })), - ), - false, - (item) => item.number, - ), - 'number', + // Look at the state of the most recent StagingDeployCash, + // if it is open then we'll update the existing one, otherwise, we'll create a new one. + const mostRecentChecklist = recentDeployChecklists[0]; + const shouldCreateNewDeployChecklist = mostRecentChecklist.state !== 'open'; + const previousChecklist = shouldCreateNewDeployChecklist ? mostRecentChecklist : recentDeployChecklists[1]; + if (shouldCreateNewDeployChecklist) { + console.log('Latest StagingDeployCash is closed, creating a new one.', mostRecentChecklist); + } else { + console.log('Latest StagingDeployCash is open, updating it instead of creating a new one.', 'Current:', mostRecentChecklist, 'Previous:', previousChecklist); + } + + // Parse the data from the previous and current checklists into the format used to generate the checklist + const previousChecklistData = GithubUtils.getStagingDeployCashData(previousChecklist); + const currentChecklistData = shouldCreateNewDeployChecklist ? {} : GithubUtils.getStagingDeployCashData(mostRecentChecklist); + + // Find the list of PRs merged between the current checklist and the previous checklist + // Note that any time we're creating a new checklist we MUST have `NPM_VERSION` passed in as an input + const newTag = newVersion || _.get(currentChecklistData, 'tag'); + const mergedPRs = await GitUtils.getPullRequestsMergedBetween(previousChecklistData.tag, newTag); + + // Next, we generate the checklist body + let checklistBody = ''; + if (shouldCreateNewDeployChecklist) { + checklistBody = await GithubUtils.generateStagingDeployCashBody(newTag, _.map(mergedPRs, GithubUtils.getPullRequestURLFromNumber)); + } else { + // Generate the updated PR list, preserving the previous state of `isVerified` for existing PRs + const PRList = _.reduce( + mergedPRs, + (memo, prNum) => { + const indexOfPRInCurrentChecklist = _.findIndex(currentChecklistData.PRList, (pr) => pr.number === prNum); + const isVerified = indexOfPRInCurrentChecklist >= 0 ? currentChecklistData.PRList[indexOfPRInCurrentChecklist].isVerified : false; + memo.push({ + number: prNum, + url: GithubUtils.getPullRequestURLFromNumber(prNum), + isVerified, + }); + return memo; + }, + [], ); // Generate the deploy blocker list, preserving the previous state of `isResolved` - const deployBlockers = _.sortBy( - _.unique(_.union(currentStagingDeployCashData.deployBlockers, newDeployBlockers), false, (item) => item.number), - 'number', + const {data: openDeployBlockers} = await GithubUtils.octokit.issues.listForRepo({ + log: console, + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + labels: CONST.LABELS.DEPLOY_BLOCKER, + }); + + // First, make sure we include all current deploy blockers + const deployBlockers = _.reduce( + openDeployBlockers, + (memo, deployBlocker) => { + const {html_url, number} = deployBlocker; + const indexInCurrentChecklist = _.findIndex(currentChecklistData.deployBlockers, (item) => item.number === number); + const isResolved = indexInCurrentChecklist >= 0 ? currentChecklistData.deployBlockers[indexInCurrentChecklist].isResolved : false; + memo.push({ + number, + url: html_url, + isResolved, + }); + return memo; + }, + [], ); - // Get the internalQA PR list, preserving the previous state of `isResolved` - const internalQAPRList = _.sortBy(currentStagingDeployCashData.internalQAPRList, 'number'); + // Then make sure we include any demoted or closed blockers as well, and just check them off automatically + for (const deployBlocker of currentChecklistData.deployBlockers) { + const isResolved = _.findIndex(deployBlockers, (openBlocker) => openBlocker.number === deployBlocker.number) < 0; + deployBlockers.push({ + ...deployBlocker, + isResolved, + }); + } - return GithubUtils.generateStagingDeployCashBody( + const didVersionChange = newVersion ? newVersion !== currentChecklistData.tag : false; + checklistBody = await GithubUtils.generateStagingDeployCashBody( newTag, _.pluck(PRList, 'url'), _.pluck(_.where(PRList, {isVerified: true}), 'url'), _.pluck(deployBlockers, 'url'), _.pluck(_.where(deployBlockers, {isResolved: true}), 'url'), - _.pluck(_.where(internalQAPRList, {isResolved: true}), 'url'), - didVersionChange ? false : currentStagingDeployCashData.isTimingDashboardChecked, - didVersionChange ? false : currentStagingDeployCashData.isFirebaseChecked, - didVersionChange ? false : currentStagingDeployCashData.isGHStatusChecked, + _.pluck(_.where(currentChecklistData.internalQAPRList, {isResolved: true}), 'url'), + didVersionChange ? false : currentChecklistData.isTimingDashboardChecked, + didVersionChange ? false : currentChecklistData.isFirebaseChecked, + didVersionChange ? false : currentChecklistData.isGHStatusChecked, ); - }) - .then((body) => { - const defaultPayload = { - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - body, - }; + } - if (shouldCreateNewStagingDeployCash) { - return GithubUtils.octokit.issues.create({ - ...defaultPayload, - title: `Deploy Checklist: New Expensify ${moment().format('YYYY-MM-DD')}`, - labels: [CONST.LABELS.STAGING_DEPLOY], - assignees: [CONST.APPLAUSE_BOT], - }); - } + // Finally, create or update the checklist + const defaultPayload = { + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + body: checklistBody, + }; - return GithubUtils.octokit.issues.update({ + if (shouldCreateNewDeployChecklist) { + const {data: newChecklist} = await GithubUtils.octokit.issues.create({ ...defaultPayload, - issue_number: currentStagingDeployCashData.number, + title: `Deploy Checklist: New Expensify ${moment().format('YYYY-MM-DD')}`, + labels: [CONST.LABELS.STAGING_DEPLOY], + assignees: [CONST.APPLAUSE_BOT], }); - }) - .then(({data}) => { - // eslint-disable-next-line max-len - console.log(`Successfully ${shouldCreateNewStagingDeployCash ? 'created new' : 'updated'} StagingDeployCash! 🎉 ${data.html_url}`); - return data; - }) - .catch((err) => { - console.error('An unknown error occurred!', err); - core.setFailed(err); + console.log(`Successfully created new StagingDeployCash! 🎉 ${newChecklist.html_url}`); + return newChecklist; + } + + const {data: updatedChecklist} = await GithubUtils.octokit.issues.update({ + ...defaultPayload, + issue_number: currentChecklistData.number, }); -}; + console.log(`Successfully updated StagingDeployCash! 🎉 ${updatedChecklist.html_url}`); + return updatedChecklist; + } catch (err) { + console.error('An unknown error occurred!', err); + core.setFailed(err); + } +} if (require.main === module) { run(); diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js index 1b2e81fc244e..701a9bca70a7 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js @@ -8,174 +8,145 @@ module.exports = /***/ 3926: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const moment = __nccwpck_require__(9623); const CONST = __nccwpck_require__(4097); const GithubUtils = __nccwpck_require__(7999); const GitUtils = __nccwpck_require__(669); -const run = function () { +async function run() { const newVersion = core.getInput('NPM_VERSION'); console.log('New version found from action input:', newVersion); - let shouldCreateNewStagingDeployCash = false; - let newTag = newVersion; - let newDeployBlockers = []; - let previousStagingDeployCashData = {}; - let currentStagingDeployCashData = null; - - // Start by fetching the list of recent StagingDeployCash issues, along with the list of open deploy blockers - return Promise.all([ - GithubUtils.octokit.issues.listForRepo({ + try { + // Start by fetching the list of recent StagingDeployCash issues, along with the list of open deploy blockers + const {data: recentDeployChecklists} = await GithubUtils.octokit.issues.listForRepo({ log: console, owner: CONST.GITHUB_OWNER, repo: CONST.APP_REPO, labels: CONST.LABELS.STAGING_DEPLOY, state: 'all', - }), - GithubUtils.octokit.issues.listForRepo({ - log: console, - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - labels: CONST.LABELS.DEPLOY_BLOCKER, - }), - ]) - .then(([stagingDeployResponse, deployBlockerResponse]) => { - if (!stagingDeployResponse || !stagingDeployResponse.data || _.isEmpty(stagingDeployResponse.data)) { - console.error('Failed fetching StagingDeployCash issues from Github!', stagingDeployResponse); - throw new Error('Failed fetching StagingDeployCash issues from Github'); - } - - if (!deployBlockerResponse || !deployBlockerResponse.data) { - console.log('Failed fetching DeployBlockerCash issues from Github, continuing...'); - } - - newDeployBlockers = _.map(deployBlockerResponse.data, ({html_url}) => ({ - url: html_url, - number: GithubUtils.getIssueOrPullRequestNumberFromURL(html_url), - isResolved: false, - })); - - // Look at the state of the most recent StagingDeployCash, - // if it is open then we'll update the existing one, otherwise, we'll create a new one. - shouldCreateNewStagingDeployCash = Boolean(stagingDeployResponse.data[0].state !== 'open'); - if (shouldCreateNewStagingDeployCash) { - console.log('Latest StagingDeployCash is closed, creating a new one.', stagingDeployResponse.data[0]); - } else { - console.log( - 'Latest StagingDeployCash is open, updating it instead of creating a new one.', - 'Current:', - stagingDeployResponse.data[0], - 'Previous:', - stagingDeployResponse.data[1], - ); - } - - // Parse the data from the previous StagingDeployCash - // (newest if there are none open, otherwise second-newest) - previousStagingDeployCashData = shouldCreateNewStagingDeployCash - ? GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[0]) - : GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[1]); - - console.log('Found tag of previous StagingDeployCash:', previousStagingDeployCashData.tag); - - // Find the list of PRs merged between the last StagingDeployCash and the new version - if (shouldCreateNewStagingDeployCash) { - return GitUtils.getPullRequestsMergedBetween(previousStagingDeployCashData.tag, newTag); - } - - currentStagingDeployCashData = GithubUtils.getStagingDeployCashData(stagingDeployResponse.data[0]); - console.log('Parsed the following data from the current StagingDeployCash:', currentStagingDeployCashData); + }); - // If we aren't sent a tag, then use the existing tag - newTag = newTag || currentStagingDeployCashData.tag; + // Look at the state of the most recent StagingDeployCash, + // if it is open then we'll update the existing one, otherwise, we'll create a new one. + const mostRecentChecklist = recentDeployChecklists[0]; + const shouldCreateNewDeployChecklist = mostRecentChecklist.state !== 'open'; + const previousChecklist = shouldCreateNewDeployChecklist ? mostRecentChecklist : recentDeployChecklists[1]; + if (shouldCreateNewDeployChecklist) { + console.log('Latest StagingDeployCash is closed, creating a new one.', mostRecentChecklist); + } else { + console.log('Latest StagingDeployCash is open, updating it instead of creating a new one.', 'Current:', mostRecentChecklist, 'Previous:', previousChecklist); + } - return GitUtils.getPullRequestsMergedBetween(previousStagingDeployCashData.tag, newTag); - }) - .then((mergedPRs) => { - console.log(`The following PRs have been merged between the previous StagingDeployCash (${previousStagingDeployCashData.tag}) and new version (${newVersion}):`, mergedPRs); + // Parse the data from the previous and current checklists into the format used to generate the checklist + const previousChecklistData = GithubUtils.getStagingDeployCashData(previousChecklist); + const currentChecklistData = shouldCreateNewDeployChecklist ? {} : GithubUtils.getStagingDeployCashData(mostRecentChecklist); - if (shouldCreateNewStagingDeployCash) { - return GithubUtils.generateStagingDeployCashBody(newTag, _.map(mergedPRs, GithubUtils.getPullRequestURLFromNumber)); - } + // Find the list of PRs merged between the current checklist and the previous checklist + // Note that any time we're creating a new checklist we MUST have `NPM_VERSION` passed in as an input + const newTag = newVersion || _.get(currentChecklistData, 'tag'); + const mergedPRs = await GitUtils.getPullRequestsMergedBetween(previousChecklistData.tag, newTag); - const didVersionChange = newVersion ? newVersion !== currentStagingDeployCashData.tag : false; - - // Generate the PR list, preserving the previous state of `isVerified` for existing PRs - const PRList = _.sortBy( - _.unique( - _.union( - currentStagingDeployCashData.PRList, - _.map(mergedPRs, (number) => ({ - number: Number.parseInt(number, 10), - url: GithubUtils.getPullRequestURLFromNumber(number), - - // Since this is the second argument to _.union, - // it will appear later in the array than any duplicate. - // Since it is later in the array, it will be truncated by _.unique, - // and the original value of isVerified will be preserved. - isVerified: false, - })), - ), - false, - (item) => item.number, - ), - 'number', + // Next, we generate the checklist body + let checklistBody = ''; + if (shouldCreateNewDeployChecklist) { + checklistBody = await GithubUtils.generateStagingDeployCashBody(newTag, _.map(mergedPRs, GithubUtils.getPullRequestURLFromNumber)); + } else { + // Generate the updated PR list, preserving the previous state of `isVerified` for existing PRs + const PRList = _.reduce( + mergedPRs, + (memo, prNum) => { + const indexOfPRInCurrentChecklist = _.findIndex(currentChecklistData.PRList, (pr) => pr.number === prNum); + const isVerified = indexOfPRInCurrentChecklist >= 0 ? currentChecklistData.PRList[indexOfPRInCurrentChecklist].isVerified : false; + memo.push({ + number: prNum, + url: GithubUtils.getPullRequestURLFromNumber(prNum), + isVerified, + }); + return memo; + }, + [], ); // Generate the deploy blocker list, preserving the previous state of `isResolved` - const deployBlockers = _.sortBy( - _.unique(_.union(currentStagingDeployCashData.deployBlockers, newDeployBlockers), false, (item) => item.number), - 'number', + const {data: openDeployBlockers} = await GithubUtils.octokit.issues.listForRepo({ + log: console, + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + labels: CONST.LABELS.DEPLOY_BLOCKER, + }); + + // First, make sure we include all current deploy blockers + const deployBlockers = _.reduce( + openDeployBlockers, + (memo, deployBlocker) => { + const {html_url, number} = deployBlocker; + const indexInCurrentChecklist = _.findIndex(currentChecklistData.deployBlockers, (item) => item.number === number); + const isResolved = indexInCurrentChecklist >= 0 ? currentChecklistData.deployBlockers[indexInCurrentChecklist].isResolved : false; + memo.push({ + number, + url: html_url, + isResolved, + }); + return memo; + }, + [], ); - // Get the internalQA PR list, preserving the previous state of `isResolved` - const internalQAPRList = _.sortBy(currentStagingDeployCashData.internalQAPRList, 'number'); + // Then make sure we include any demoted or closed blockers as well, and just check them off automatically + for (const deployBlocker of currentChecklistData.deployBlockers) { + const isResolved = _.findIndex(deployBlockers, (openBlocker) => openBlocker.number === deployBlocker.number) < 0; + deployBlockers.push({ + ...deployBlocker, + isResolved, + }); + } - return GithubUtils.generateStagingDeployCashBody( + const didVersionChange = newVersion ? newVersion !== currentChecklistData.tag : false; + checklistBody = await GithubUtils.generateStagingDeployCashBody( newTag, _.pluck(PRList, 'url'), _.pluck(_.where(PRList, {isVerified: true}), 'url'), _.pluck(deployBlockers, 'url'), _.pluck(_.where(deployBlockers, {isResolved: true}), 'url'), - _.pluck(_.where(internalQAPRList, {isResolved: true}), 'url'), - didVersionChange ? false : currentStagingDeployCashData.isTimingDashboardChecked, - didVersionChange ? false : currentStagingDeployCashData.isFirebaseChecked, - didVersionChange ? false : currentStagingDeployCashData.isGHStatusChecked, + _.pluck(_.where(currentChecklistData.internalQAPRList, {isResolved: true}), 'url'), + didVersionChange ? false : currentChecklistData.isTimingDashboardChecked, + didVersionChange ? false : currentChecklistData.isFirebaseChecked, + didVersionChange ? false : currentChecklistData.isGHStatusChecked, ); - }) - .then((body) => { - const defaultPayload = { - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - body, - }; + } - if (shouldCreateNewStagingDeployCash) { - return GithubUtils.octokit.issues.create({ - ...defaultPayload, - title: `Deploy Checklist: New Expensify ${moment().format('YYYY-MM-DD')}`, - labels: [CONST.LABELS.STAGING_DEPLOY], - assignees: [CONST.APPLAUSE_BOT], - }); - } + // Finally, create or update the checklist + const defaultPayload = { + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + body: checklistBody, + }; - return GithubUtils.octokit.issues.update({ + if (shouldCreateNewDeployChecklist) { + const {data: newChecklist} = await GithubUtils.octokit.issues.create({ ...defaultPayload, - issue_number: currentStagingDeployCashData.number, + title: `Deploy Checklist: New Expensify ${moment().format('YYYY-MM-DD')}`, + labels: [CONST.LABELS.STAGING_DEPLOY], + assignees: [CONST.APPLAUSE_BOT], }); - }) - .then(({data}) => { - // eslint-disable-next-line max-len - console.log(`Successfully ${shouldCreateNewStagingDeployCash ? 'created new' : 'updated'} StagingDeployCash! 🎉 ${data.html_url}`); - return data; - }) - .catch((err) => { - console.error('An unknown error occurred!', err); - core.setFailed(err); + console.log(`Successfully created new StagingDeployCash! 🎉 ${newChecklist.html_url}`); + return newChecklist; + } + + const {data: updatedChecklist} = await GithubUtils.octokit.issues.update({ + ...defaultPayload, + issue_number: currentChecklistData.number, }); -}; + console.log(`Successfully updated StagingDeployCash! 🎉 ${updatedChecklist.html_url}`); + return updatedChecklist; + } catch (err) { + console.error('An unknown error occurred!', err); + core.setFailed(err); + } +} if (require.main === require.cache[eval('__filename')]) { run(); @@ -212,7 +183,7 @@ module.exports = CONST; /***/ 669: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const {spawn, execSync} = __nccwpck_require__(3129); const CONST = __nccwpck_require__(4097); const sanitizeStringForJSONParse = __nccwpck_require__(9338); @@ -293,7 +264,7 @@ function getCommitHistoryAsJSON(fromTag, toTag) { * Parse merged PRs, excluding those from irrelevant branches. * * @param {Array>} commits - * @returns {Array} + * @returns {Array} */ function getValidMergedPRs(commits) { const mergedPRs = new Set(); @@ -308,7 +279,7 @@ function getValidMergedPRs(commits) { return; } - const pr = match[1]; + const pr = Number.parseInt(match[1], 10); if (mergedPRs.has(pr)) { // If a PR shows up in the log twice, that means that the PR was deployed in the previous checklist. // That also means that we don't want to include it in the current checklist, so we remove it now. @@ -327,7 +298,7 @@ function getValidMergedPRs(commits) { * * @param {String} fromTag * @param {String} toTag - * @returns {Promise>} – Pull request numbers + * @returns {Promise>} – Pull request numbers */ function getPullRequestsMergedBetween(fromTag, toTag) { return getCommitHistoryAsJSON(fromTag, toTag).then((commitList) => { @@ -351,7 +322,7 @@ module.exports = { /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -785,7 +756,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -909,7 +880,7 @@ module.exports = function (inputString) { /***/ 8007: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const SEMANTIC_VERSION_LEVELS = { MAJOR: 'MAJOR', @@ -22193,874 +22164,872 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); + + +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); } -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} - return parseInt(uuid.substr(14, 1), 16); +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } } -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ }), -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; +} - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; } + return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -/***/ }), - -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { - -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; - -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +_.VERSION = VERSION; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} -// Is a given value equal to null? -function isNull(obj) { - return obj === null; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); -var isArrayBuffer = tagTester('ArrayBuffer'); -var isFunction = tagTester('Function'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); } -var isFunction$1 = isFunction; - -var hasObjectTag = tagTester('Object'); - -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -var isDataView = tagTester('DataView'); + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); -} + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); - -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); - -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); -} - -var isArguments = tagTester('Arguments'); - -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); - -var isArguments$1 = isArguments; - -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} - -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; - }; -} - -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; - } -} - -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; -} - -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); - -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); - -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); -} - -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); - -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); - -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); - } - }; -} - -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} - -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} - -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} - -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; -} - -_$1.VERSION = VERSION; - -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; - -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; - -_$1.prototype.toString = function() { - return String(this._wrapped); -}; - -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); -} - -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; - -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } // Add the first object to the stack of traversed objects. aStack.push(a); @@ -23084,7 +23053,7 @@ function deepEq(a, b, aStack, bStack) { while (length--) { // Deep compare each member key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; } } // Remove the first object from the stack of traversed objects. @@ -23098,6 +23067,11 @@ function isEqual(a, b) { return eq(a, b); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js + + + + // Retrieve all the enumerable property names of an object. function allKeys(obj) { if (!isObject(obj)) return []; @@ -23108,24 +23082,29 @@ function allKeys(obj) { return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js + + + + // Since the regular `Object.prototype.toString` type tests don't work for // some types in IE 11, we use a fingerprinting heuristic instead, based // on the methods. It's not great, but it's the best we got. // The fingerprint method lists are defined below. function ie11fingerprint(methods) { - var length = getLength(methods); + var length = _getLength(methods); return function(obj) { if (obj == null) return false; // `Map`, `WeakMap` and `Set` have no enumerable keys. var keys = allKeys(obj); - if (getLength(keys)) return false; + if (_getLength(keys)) return false; for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; + if (!modules_isFunction(obj[methods[i]])) return false; } // If we are testing against `WeakMap`, we need to ensure that // `obj` doesn't have a `forEach` method in order to distinguish // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } @@ -23142,24 +23121,48 @@ var mapMethods = commonInit.concat(forEachName, mapTail), weakMapMethods = commonInit.concat(mapTail), setMethods = ['add'].concat(commonInit, forEachName, hasName); -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); -var isWeakSet = tagTester('WeakSet'); -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; + } + return values; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + // Convert an object into a list of `[key, value]` pairs. // The opposite of `_.object` with one argument. @@ -23173,6 +23176,9 @@ function pairs(obj) { return pairs; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js + + // Invert the keys and values of an object. The values must be serializable. function invert(obj) { var result = {}; @@ -23183,15 +23189,19 @@ function invert(obj) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js + + // Return a sorted list of the function names available on the object. function functions(obj) { var names = []; for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); + if (modules_isFunction(obj[key])) names.push(key); } return names.sort(); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js // An internal function for creating assigner functions. function createAssigner(keysFunc, defaults) { return function(obj) { @@ -23211,16 +23221,32 @@ function createAssigner(keysFunc, defaults) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js + + + // Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); +/* harmony default export */ const extend = (createAssigner(allKeys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js + + // Assigns a given object with all the own properties in the passed-in // object(s). // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + // Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + // Create a naked function reference for surrogate-prototype-swapping. function ctor() { @@ -23238,6 +23264,10 @@ function baseCreate(prototype) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js + + + // Creates an object that inherits from the given prototype object. // If additional properties are provided then they will be added to the // created object. @@ -23247,12 +23277,18 @@ function create(prototype, props) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js + + + + // Create a (shallow-cloned) duplicate of an object. function clone(obj) { if (!isObject(obj)) return obj; return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -23261,19 +23297,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -23284,34 +23329,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -23321,15 +23380,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -23352,31 +23416,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -23391,9 +23477,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -23402,6 +23493,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -23410,6 +23504,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -23419,10 +23514,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -23440,32 +23539,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -23502,7 +23622,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -23556,7 +23676,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -23565,14 +23685,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -23580,11 +23704,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -23593,13 +23718,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -23611,6 +23743,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -23629,26 +23766,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -23656,12 +23809,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -23674,11 +23827,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -23686,31 +23844,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -23758,6 +23930,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -23796,13 +23972,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -23810,6 +23990,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -23823,6 +24004,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -23832,6 +24014,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -23845,9 +24028,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -23859,11 +24050,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -23872,18 +24067,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -23891,10 +24096,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -23906,7 +24116,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -23916,29 +24126,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -23946,7 +24179,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -23959,10 +24192,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -23972,12 +24210,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -23997,12 +24240,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -24014,15 +24267,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -24031,10 +24294,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -24043,20 +24311,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -24071,25 +24351,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -24109,12 +24403,18 @@ function max(obj, iteratee, context) { return result; } -// Return the minimum element (or element-based computation). +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + +// Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -24134,6 +24434,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -24143,21 +24452,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -24169,11 +24485,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -24195,6 +24519,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -24208,53 +24536,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -24263,22 +24618,34 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + // Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in @@ -24287,521 +24654,951 @@ function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/getDeployPullRequestList/index.js b/.github/actions/javascript/getDeployPullRequestList/index.js index 56541aa31b27..def58d95e846 100644 --- a/.github/actions/javascript/getDeployPullRequestList/index.js +++ b/.github/actions/javascript/getDeployPullRequestList/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 5847: /***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const github = __nccwpck_require__(5438); const ActionUtils = __nccwpck_require__(970); @@ -146,7 +146,7 @@ module.exports = CONST; /***/ 669: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const {spawn, execSync} = __nccwpck_require__(3129); const CONST = __nccwpck_require__(4097); const sanitizeStringForJSONParse = __nccwpck_require__(9338); @@ -227,7 +227,7 @@ function getCommitHistoryAsJSON(fromTag, toTag) { * Parse merged PRs, excluding those from irrelevant branches. * * @param {Array>} commits - * @returns {Array} + * @returns {Array} */ function getValidMergedPRs(commits) { const mergedPRs = new Set(); @@ -242,7 +242,7 @@ function getValidMergedPRs(commits) { return; } - const pr = match[1]; + const pr = Number.parseInt(match[1], 10); if (mergedPRs.has(pr)) { // If a PR shows up in the log twice, that means that the PR was deployed in the previous checklist. // That also means that we don't want to include it in the current checklist, so we remove it now. @@ -261,7 +261,7 @@ function getValidMergedPRs(commits) { * * @param {String} fromTag * @param {String} toTag - * @returns {Promise>} – Pull request numbers + * @returns {Promise>} – Pull request numbers */ function getPullRequestsMergedBetween(fromTag, toTag) { return getCommitHistoryAsJSON(fromTag, toTag).then((commitList) => { @@ -285,7 +285,7 @@ module.exports = { /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -719,7 +719,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -843,7 +843,7 @@ module.exports = function (inputString) { /***/ 8007: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const SEMANTIC_VERSION_LEVELS = { MAJOR: 'MAJOR', @@ -16479,1066 +16479,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17547,19 +17612,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17570,34 +17644,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17607,15 +17695,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17638,31 +17731,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17677,9 +17792,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17688,6 +17808,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17696,6 +17819,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17705,10 +17829,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17726,32 +17854,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17788,7 +17937,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17842,7 +17991,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17851,14 +18000,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17866,11 +18019,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17879,13 +18033,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17897,6 +18058,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17915,26 +18081,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17942,12 +18124,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17960,11 +18142,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17972,31 +18159,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -18044,6 +18245,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -18082,13 +18287,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -18096,6 +18305,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -18109,6 +18319,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -18118,6 +18329,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -18131,9 +18343,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -18145,11 +18365,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -18158,18 +18382,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -18177,10 +18411,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -18192,7 +18431,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -18202,29 +18441,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -18232,7 +18494,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -18245,10 +18507,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -18258,12 +18525,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -18283,12 +18555,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -18300,15 +18582,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18317,10 +18609,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18329,20 +18626,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18357,25 +18666,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18395,12 +18718,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18420,6 +18749,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18429,21 +18767,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18455,11 +18800,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18481,6 +18834,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18494,53 +18851,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18549,545 +18933,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/getPreviousVersion/index.js b/.github/actions/javascript/getPreviousVersion/index.js index 5498aa3996d7..37db08db93e9 100644 --- a/.github/actions/javascript/getPreviousVersion/index.js +++ b/.github/actions/javascript/getPreviousVersion/index.js @@ -10,7 +10,7 @@ module.exports = const {readFileSync} = __nccwpck_require__(747); const core = __nccwpck_require__(186); -const _ = __nccwpck_require__(571); +const _ = __nccwpck_require__(947); const versionUpdater = __nccwpck_require__(7); const semverLevel = core.getInput('SEMVER_LEVEL', {require: true}); @@ -28,7 +28,7 @@ core.setOutput('PREVIOUS_VERSION', previousVersion); /***/ 7: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(571); +const _ = __nccwpck_require__(947); const SEMANTIC_VERSION_LEVELS = { MAJOR: 'MAJOR', @@ -2214,8 +2214,8 @@ exports.debug = debug; // for test /***/ }), -/***/ 521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +/***/ 947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; // ESM COMPAT FLAG @@ -2223,636 +2223,672 @@ __nccwpck_require__.r(__webpack_exports__); // EXPORTS __nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip }); -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - return rnds8Pool.slice(poolPtr, poolPtr += 16); -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); -} +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -const byteToHex = []; +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return uuid; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; +} -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; +} - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +/* harmony default export */ const isString = (tagTester('String')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +/* harmony default export */ const isNumber = (tagTester('Number')); - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isDate = (tagTester('Date')); - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +/* harmony default export */ const isError = (tagTester('Error')); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +/* harmony default export */ const isSymbol = (tagTester('Symbol')); - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - b[i++] = clockseq & 0xff; // `node` - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - return buf || esm_node_stringify(b); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +var isFunction = tagTester('Function'); - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ +/* harmony default export */ const modules_isFunction = (isFunction); - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - const bytes = []; - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - return bytes; -} -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` - - - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - - if (buf) { - offset = offset || 0; - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +var isDataView = tagTester('DataView'); - return buf; - } +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); +} - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('md5').update(bytes).digest(); +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +var isArguments = tagTester('Arguments'); -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +/* harmony default export */ const modules_isArguments = (isArguments); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); } -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('sha1').update(bytes).digest(); +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } - - return parseInt(uuid.substr(14, 1), 16); } -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js - +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js -/***/ }), -/***/ 641: -/***/ ((__unused_webpack_module, exports) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -Object.defineProperty(exports, "__esModule", ({ value: true })); -// Current version. -var VERSION = '1.13.4'; +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); } - args[startIndex] = rest; - return func.apply(this, args); }; } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} - -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} - -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} - -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } } -var isString = tagTester('String'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); - -var isSymbol = tagTester('Symbol'); - -var isArrayBuffer = tagTester('ArrayBuffer'); - -var isFunction = tagTester('Function'); - -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} - -var isFunction$1 = isFunction; - -var hasObjectTag = tagTester('Object'); - -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); - -var isDataView = tagTester('DataView'); - -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); -} - -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); - -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); - -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); -} - -var isArguments = tagTester('Arguments'); - -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); - -var isArguments$1 = isArguments; - -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} - -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; - }; -} - -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; - } -} - -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; -} - -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); - -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); - -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); -} - -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); - -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); - -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); - } - }; -} - -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} // Retrieve the names of an object's own properties. // Delegates to **ECMAScript 5**'s native `Object.keys`. @@ -2860,25 +2896,35 @@ function keys(obj) { if (!isObject(obj)) return []; if (nativeKeys) return nativeKeys(obj); var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); + for (var key in obj) if (has(obj, key)) keys.push(key); // Ahem, IE < 9. if (hasEnumBug) collectNonEnumProps(obj, keys); return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js + + + + + + // Is a given array, string, or object empty? // An "empty" object has no enumerable own-properties. function isEmpty(obj) { if (obj == null) return true; // Skip the more expensive `toString`-based type checks if `obj` has no // `.length`. - var length = getLength(obj); + var length = _getLength(obj); if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) + isArray(obj) || isString(obj) || modules_isArguments(obj) )) return length === 0; - return getLength(keys(obj)) === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js + + // Returns whether an object has a given set of `key:value` pairs. function isMatch(object, attrs) { var _keys = keys(attrs), length = _keys.length; @@ -2891,40 +2937,58 @@ function isMatch(object, attrs) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js + + // If Underscore is called as a function, it returns a wrapped object that can // be used OO-style. This wrapper holds altered versions of all functions added // through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); this._wrapped = obj; } -_$1.VERSION = VERSION; +_.VERSION = VERSION; // Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { +_.prototype.value = function() { return this._wrapped; }; // Provide unwrapping proxies for some methods used in engine operations // such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -_$1.prototype.toString = function() { +_.prototype.toString = function() { return String(this._wrapped); }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js + + // Internal function to wrap or shallow-copy an ArrayBuffer, // typed array or DataView to a new view, reusing the buffer. function toBufferView(bufferSource) { return new Uint8Array( bufferSource.buffer || bufferSource, bufferSource.byteOffset || 0, - getByteLength(bufferSource) + _getByteLength(bufferSource) ); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js + + + + + + + + + + + // We use this string twice, so give it a name for minification. var tagDataView = '[object DataView]'; @@ -2946,14 +3010,14 @@ function eq(a, b, aStack, bStack) { // Internal recursive comparison function for `_.isEqual`. function deepEq(a, b, aStack, bStack) { // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; className = tagDataView; } switch (className) { @@ -2985,9 +3049,9 @@ function deepEq(a, b, aStack, bStack) { } var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; areArrays = true; } @@ -2997,8 +3061,8 @@ function deepEq(a, b, aStack, bStack) { // Objects with different constructors are not equivalent, but `Object`s or `Array`s // from different frames are. var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) && ('constructor' in a && 'constructor' in b)) { return false; } @@ -3039,7 +3103,7 @@ function deepEq(a, b, aStack, bStack) { while (length--) { // Deep compare each member key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; } } // Remove the first object from the stack of traversed objects. @@ -3053,6 +3117,11 @@ function isEqual(a, b) { return eq(a, b); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js + + + + // Retrieve all the enumerable property names of an object. function allKeys(obj) { if (!isObject(obj)) return []; @@ -3063,24 +3132,29 @@ function allKeys(obj) { return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js + + + + // Since the regular `Object.prototype.toString` type tests don't work for // some types in IE 11, we use a fingerprinting heuristic instead, based // on the methods. It's not great, but it's the best we got. // The fingerprint method lists are defined below. function ie11fingerprint(methods) { - var length = getLength(methods); + var length = _getLength(methods); return function(obj) { if (obj == null) return false; // `Map`, `WeakMap` and `Set` have no enumerable keys. var keys = allKeys(obj); - if (getLength(keys)) return false; + if (_getLength(keys)) return false; for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; + if (!modules_isFunction(obj[methods[i]])) return false; } // If we are testing against `WeakMap`, we need to ensure that // `obj` doesn't have a `forEach` method in order to distinguish // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } @@ -3097,13 +3171,34 @@ var mapMethods = commonInit.concat(forEachName, mapTail), weakMapMethods = commonInit.concat(mapTail), setMethods = ['add'].concat(commonInit, forEachName, hasName); -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js -var isWeakSet = tagTester('WeakSet'); // Retrieve the values of an object's properties. function values(obj) { @@ -3116,6 +3211,9 @@ function values(obj) { return values; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + // Convert an object into a list of `[key, value]` pairs. // The opposite of `_.object` with one argument. function pairs(obj) { @@ -3128,6 +3226,9 @@ function pairs(obj) { return pairs; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js + + // Invert the keys and values of an object. The values must be serializable. function invert(obj) { var result = {}; @@ -3138,15 +3239,19 @@ function invert(obj) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js + + // Return a sorted list of the function names available on the object. function functions(obj) { var names = []; for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); + if (modules_isFunction(obj[key])) names.push(key); } return names.sort(); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js // An internal function for creating assigner functions. function createAssigner(keysFunc, defaults) { return function(obj) { @@ -3166,16 +3271,32 @@ function createAssigner(keysFunc, defaults) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js + + + // Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); +/* harmony default export */ const extend = (createAssigner(allKeys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js + + // Assigns a given object with all the own properties in the passed-in // object(s). // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + // Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + // Create a naked function reference for surrogate-prototype-swapping. function ctor() { @@ -3193,6 +3314,10 @@ function baseCreate(prototype) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js + + + // Creates an object that inherits from the given prototype object. // If additional properties are provided then they will be added to the // created object. @@ -3202,12 +3327,18 @@ function create(prototype, props) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js + + + + // Create a (shallow-cloned) duplicate of an object. function clone(obj) { if (!isObject(obj)) return obj; return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -3216,19 +3347,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -3239,34 +3379,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -3276,15 +3430,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -3307,31 +3466,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -3346,9 +3527,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -3357,6 +3543,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -3365,6 +3554,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -3374,10 +3564,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -3395,32 +3589,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + + +// Function for unescaping strings from HTML interpolation. +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js -// Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -3457,7 +3672,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -3511,7 +3726,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -3520,14 +3735,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -3535,11 +3754,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -3548,13 +3768,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -3566,6 +3793,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -3584,26 +3816,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -3611,12 +3859,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -3629,11 +3877,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -3641,31 +3894,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -3713,6 +3980,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -3751,13 +4022,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -3765,6 +4040,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -3778,6 +4054,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -3787,6 +4064,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -3800,9 +4078,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -3814,11 +4100,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -3827,18 +4117,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -3846,10 +4146,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -3861,7 +4166,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -3871,29 +4176,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -3901,7 +4229,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -3914,10 +4242,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -3927,12 +4260,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -3952,12 +4290,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -3969,15 +4317,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -3986,10 +4344,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -3998,20 +4361,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -4026,25 +4401,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -4064,12 +4453,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -4089,6 +4484,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -4098,21 +4502,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -4124,11 +4535,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -4150,6 +4569,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -4163,53 +4586,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -4218,22 +4668,34 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + // Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in @@ -4242,6 +4704,9 @@ function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + // Get the first element of an array. Passing **n** will return the first N // values in the array. The **guard** check allows it to work with `_.map`. function first(array, n, guard) { @@ -4250,6 +4715,9 @@ function first(array, n, guard) { return initial(array, array.length - n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + // Returns everything but the first entry of the `array`. Especially useful on // the `arguments` object. Passing an **n** will return the rest N values in the // `array`. @@ -4257,6 +4725,9 @@ function rest(array, n, guard) { return slice.call(array, n == null || guard ? 1 : n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + // Get the last element of an array. Passing **n** will return the last N // values in the array. function last(array, n, guard) { @@ -4265,30 +4736,52 @@ function last(array, n, guard) { return rest(array, Math.max(0, array.length - n)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + // Trim out all falsy values from an array. function compact(array) { return filter(array, Boolean); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + // Flatten out an array, either recursively (by default), or up to `depth`. // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); +function flatten_flatten(array, depth) { + return flatten(array, depth, false); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + // Take the difference between one array and a number of other arrays. // Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); return filter(array, function(value){ return !contains(rest, value); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + // Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { return difference(array, otherArrays); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + // Produce a duplicate-free version of the array. If the array has already // been sorted, you have the option of using a faster algorithm. @@ -4304,7 +4797,7 @@ function uniq(array, isSorted, iteratee, context) { if (iteratee != null) iteratee = cb(iteratee, context); var result = []; var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var value = array[i], computed = iteratee ? iteratee(value, i, array) : value; if (isSorted && !iteratee) { @@ -4322,18 +4815,27 @@ function uniq(array, isSorted, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + // Produce an array that contains the union: each distinct element from all of // the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + // Produce an array that contains every item shared between all the // passed-in arrays. function intersection(array) { var result = []; var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { + for (var i = 0, length = _getLength(array); i < length; i++) { var item = array[i]; if (contains(result, item)) continue; var j; @@ -4345,10 +4847,15 @@ function intersection(array) { return result; } -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; var result = Array(length); for (var index = 0; index < length; index++) { @@ -4357,16 +4864,23 @@ function unzip(array) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + // Zip together multiple lists into a single array -- elements that share // an index go together. -var zip = restArguments(unzip); +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + // Converts lists into objects. Pass either a single array of `[key, value]` // pairs, or two parallel arrays of the same length -- one of keys, and one of // the corresponding values. Passing by pairs is the reverse of `_.pairs`. function object(list, values) { var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { + for (var i = 0, length = _getLength(list); i < length; i++) { if (values) { result[list[i]] = values[i]; } else { @@ -4376,6 +4890,7 @@ function object(list, values) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js // Generate an integer Array containing an arithmetic progression. A port of // the native Python `range()` function. See // [the Python documentation](https://docs.python.org/library/functions.html#range). @@ -4398,6 +4913,9 @@ function range(start, stop, step) { return range; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + // Chunk a single array into multiple arrays, each containing `count` or fewer // items. function chunk(array, count) { @@ -4410,28 +4928,44 @@ function chunk(array, count) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + // Helper function to continue chaining intermediate results. function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return instance._chain ? _(obj).chain() : obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + // Add your own custom functions to the Underscore object. function mixin(obj) { each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { + var func = _[name] = obj[name]; + _.prototype[name] = function() { var args = [this._wrapped]; push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); + return chainResult(this, func.apply(_, args)); }; }); - return _$1; + return _; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + // Add all mutator `Array` functions to the wrapper. each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) { method.apply(obj, arguments); @@ -4446,317 +4980,609 @@ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function( // Add all accessor `Array` functions to the wrapper. each(['concat', 'join', 'slice'], function(name) { var method = ArrayProto[name]; - _$1.prototype[name] = function() { + _.prototype[name] = function() { var obj = this._wrapped; if (obj != null) obj = method.apply(obj, arguments); return chainResult(this, obj); }; }); +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js // Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js // Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + // Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); +var index_default_ = mixin(modules_namespaceObject); // Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + /***/ }), -/***/ 571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js + + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('md5').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js + + +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js + + + +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return esm_node_stringify(rnds); +} + +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + + -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -var underscoreNodeF = __nccwpck_require__(641); -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map /***/ }), diff --git a/.github/actions/javascript/getPullRequestDetails/index.js b/.github/actions/javascript/getPullRequestDetails/index.js index 28e0a65db686..ce57a3d15180 100644 --- a/.github/actions/javascript/getPullRequestDetails/index.js +++ b/.github/actions/javascript/getPullRequestDetails/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 8306: /***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const CONST = __nccwpck_require__(4097); const ActionUtils = __nccwpck_require__(970); @@ -155,7 +155,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -589,7 +589,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16123,1066 +16123,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17191,19 +17256,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17214,34 +17288,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17251,15 +17339,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17282,31 +17375,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17321,9 +17436,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17332,6 +17452,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17340,6 +17463,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17349,10 +17473,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17370,32 +17498,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17432,7 +17581,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17486,7 +17635,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17495,14 +17644,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17510,11 +17663,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17523,13 +17677,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17541,6 +17702,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17559,26 +17725,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17586,12 +17768,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17604,11 +17786,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17616,31 +17803,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17688,6 +17889,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17726,13 +17931,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17740,6 +17949,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17753,6 +17963,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17762,6 +17973,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17775,9 +17987,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17789,11 +18009,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17802,18 +18026,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17821,10 +18055,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17836,7 +18075,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17846,29 +18085,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17876,7 +18138,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17889,10 +18151,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17902,12 +18169,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17927,12 +18199,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17944,15 +18226,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17961,10 +18253,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17973,20 +18270,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18001,25 +18310,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18039,12 +18362,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18064,6 +18393,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18073,21 +18411,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18099,11 +18444,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18125,6 +18478,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18138,53 +18495,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18193,545 +18577,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/getReleaseBody/getReleaseBody.js b/.github/actions/javascript/getReleaseBody/getReleaseBody.js index d0b1b4af34c5..1eaa417e36c5 100644 --- a/.github/actions/javascript/getReleaseBody/getReleaseBody.js +++ b/.github/actions/javascript/getReleaseBody/getReleaseBody.js @@ -1,10 +1,9 @@ -const _ = require('underscore'); const core = require('@actions/core'); const ActionUtils = require('../../../libs/ActionUtils'); const GithubUtils = require('../../../libs/GithubUtils'); // Parse the stringified JSON array of PR numbers, and cast each from String -> Number -const PRList = _.map(ActionUtils.getJSONInput('PR_LIST', {required: true}), Number); +const PRList = ActionUtils.getJSONInput('PR_LIST', {required: true}); console.log(`Got PR list: ${PRList}`); const releaseBody = GithubUtils.getReleaseBody(PRList); diff --git a/.github/actions/javascript/getReleaseBody/index.js b/.github/actions/javascript/getReleaseBody/index.js index 460ac29d724e..f80eefdfabf7 100644 --- a/.github/actions/javascript/getReleaseBody/index.js +++ b/.github/actions/javascript/getReleaseBody/index.js @@ -8,13 +8,12 @@ module.exports = /***/ 8201: /***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); const core = __nccwpck_require__(2186); const ActionUtils = __nccwpck_require__(970); const GithubUtils = __nccwpck_require__(7999); // Parse the stringified JSON array of PR numbers, and cast each from String -> Number -const PRList = _.map(ActionUtils.getJSONInput('PR_LIST', {required: true}), Number); +const PRList = ActionUtils.getJSONInput('PR_LIST', {required: true}); console.log(`Got PR list: ${PRList}`); const releaseBody = GithubUtils.getReleaseBody(PRList); @@ -97,7 +96,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -531,7 +530,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16065,1066 +16064,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17133,19 +17197,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17156,34 +17229,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17193,15 +17280,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17224,31 +17316,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17263,9 +17377,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17274,6 +17393,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17282,6 +17404,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17291,10 +17414,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17312,32 +17439,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17374,7 +17522,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17428,7 +17576,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17437,14 +17585,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17452,11 +17604,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17465,13 +17618,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17483,6 +17643,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17501,26 +17666,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17528,12 +17709,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17546,11 +17727,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17558,31 +17744,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17630,6 +17830,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17668,13 +17872,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17682,6 +17890,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17695,6 +17904,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17704,6 +17914,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17717,9 +17928,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17731,11 +17950,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17744,18 +17967,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17763,10 +17996,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17778,7 +18016,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17788,29 +18026,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17818,7 +18079,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17831,10 +18092,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17844,12 +18110,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17869,12 +18140,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17886,15 +18167,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17903,10 +18194,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17915,20 +18211,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17943,25 +18251,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17981,12 +18303,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18006,6 +18334,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18015,21 +18352,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18041,11 +18385,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18067,6 +18419,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18080,53 +18436,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18135,545 +18518,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/isStagingDeployLocked/index.js b/.github/actions/javascript/isStagingDeployLocked/index.js index 9bcb3f24e7ac..847843186ff7 100644 --- a/.github/actions/javascript/isStagingDeployLocked/index.js +++ b/.github/actions/javascript/isStagingDeployLocked/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 8441: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const GithubUtils = __nccwpck_require__(7999); @@ -61,7 +61,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -495,7 +495,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16029,1066 +16029,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17097,19 +17162,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17120,34 +17194,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17157,15 +17245,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17188,31 +17281,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17227,9 +17342,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17238,6 +17358,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17246,6 +17369,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17255,10 +17379,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17276,32 +17404,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17338,7 +17487,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17392,7 +17541,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17401,14 +17550,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17416,11 +17569,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17429,13 +17583,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17447,6 +17608,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17465,26 +17631,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17492,12 +17674,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17510,11 +17692,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17522,31 +17709,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17594,6 +17795,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17632,13 +17837,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17646,6 +17855,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17659,6 +17869,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17668,6 +17879,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17681,9 +17893,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17695,11 +17915,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17708,18 +17932,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17727,10 +17961,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17742,7 +17981,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17752,29 +17991,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17782,7 +18044,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17795,10 +18057,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17808,12 +18075,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17833,12 +18105,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17850,15 +18132,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17867,10 +18159,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17879,20 +18176,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17907,25 +18216,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17945,12 +18268,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -17970,6 +18299,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -17979,21 +18317,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18005,11 +18350,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18031,6 +18384,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18044,53 +18401,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18099,545 +18483,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/index.js b/.github/actions/javascript/markPullRequestsAsDeployed/index.js index 38a45bda5054..80f75137bb71 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/index.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/index.js @@ -8,18 +8,13 @@ module.exports = /***/ 2759: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); -const lodashGet = __nccwpck_require__(6908); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const {context} = __nccwpck_require__(5438); const CONST = __nccwpck_require__(4097); const ActionUtils = __nccwpck_require__(970); const GithubUtils = __nccwpck_require__(7999); -const prList = ActionUtils.getJSONInput('PR_LIST', {required: true}); -const isProd = ActionUtils.getJSONInput('IS_PRODUCTION_DEPLOY', {required: true}); -const version = core.getInput('DEPLOY_VERSION', {required: true}); - /** * Return a nicely formatted message for the table based on the result of the GitHub action job * @@ -40,34 +35,6 @@ function getDeployTableMessage(platformResult) { } } -const androidResult = getDeployTableMessage(core.getInput('ANDROID', {required: true})); -const desktopResult = getDeployTableMessage(core.getInput('DESKTOP', {required: true})); -const iOSResult = getDeployTableMessage(core.getInput('IOS', {required: true})); -const webResult = getDeployTableMessage(core.getInput('WEB', {required: true})); - -const workflowURL = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`; - -/** - * @param {String} deployer - * @param {String} deployVerb - * @param {String} prTitle - * @returns {String} - */ -function getDeployMessage(deployer, deployVerb, prTitle) { - let message = `🚀 [${deployVerb}](${workflowURL}) to ${isProd ? 'production' : 'staging'}`; - message += ` by https://github.com/${deployer} in version: ${version} 🚀`; - message += `\n\n platform | result \n ---|--- \n🤖 android 🤖|${androidResult} \n🖥 desktop 🖥|${desktopResult}`; - message += `\n🍎 iOS 🍎|${iOSResult} \n🕸 web 🕸|${webResult}`; - - if (deployVerb === 'Cherry-picked' && !/no qa/gi.test(prTitle)) { - // eslint-disable-next-line max-len - message += - '\n\n@Expensify/applauseleads please QA this PR and check it off on the [deploy checklist](https://github.com/Expensify/App/issues?q=is%3Aopen+is%3Aissue+label%3AStagingDeployCash) if it passes.'; - } - - return message; -} - /** * Comment Single PR * @@ -75,87 +42,108 @@ function getDeployMessage(deployer, deployVerb, prTitle) { * @param {String} message * @returns {Promise} */ -function commentPR(PR, message) { - return GithubUtils.createComment(context.repo.repo, PR, message) - .then(() => console.log(`Comment created on #${PR} successfully 🎉`)) - .catch((err) => { - console.log(`Unable to write comment on #${PR} 😞`); - core.setFailed(err.message); - }); +async function commentPR(PR, message) { + try { + await GithubUtils.createComment(context.repo.repo, PR, message); + console.log(`Comment created on #${PR} successfully 🎉`); + } catch (err) { + console.log(`Unable to write comment on #${PR} 😞`); + core.setFailed(err.message); + } } -const run = function () { +const workflowURL = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`; + +async function run() { + const prList = _.map(ActionUtils.getJSONInput('PR_LIST', {required: true}), (num) => Number.parseInt(num, 10)); + const isProd = ActionUtils.getJSONInput('IS_PRODUCTION_DEPLOY', {required: true}); + const version = core.getInput('DEPLOY_VERSION', {required: true}); + + const androidResult = getDeployTableMessage(core.getInput('ANDROID', {required: true})); + const desktopResult = getDeployTableMessage(core.getInput('DESKTOP', {required: true})); + const iOSResult = getDeployTableMessage(core.getInput('IOS', {required: true})); + const webResult = getDeployTableMessage(core.getInput('WEB', {required: true})); + + /** + * @param {String} deployer + * @param {String} deployVerb + * @param {String} prTitle + * @returns {String} + */ + function getDeployMessage(deployer, deployVerb, prTitle) { + let message = `🚀 [${deployVerb}](${workflowURL}) to ${isProd ? 'production' : 'staging'}`; + message += ` by https://github.com/${deployer} in version: ${version} 🚀`; + message += `\n\nplatform | result\n---|---\n🤖 android 🤖|${androidResult}\n🖥 desktop 🖥|${desktopResult}`; + message += `\n🍎 iOS 🍎|${iOSResult}\n🕸 web 🕸|${webResult}`; + + if (deployVerb === 'Cherry-picked' && !/no ?qa/gi.test(prTitle)) { + // eslint-disable-next-line max-len + message += + '\n\n@Expensify/applauseleads please QA this PR and check it off on the [deploy checklist](https://github.com/Expensify/App/issues?q=is%3Aopen+is%3Aissue+label%3AStagingDeployCash) if it passes.'; + } + + return message; + } + if (isProd) { - // First find the deployer (who closed the last deploy checklist)? - return GithubUtils.octokit.issues - .listForRepo({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - labels: CONST.LABELS.STAGING_DEPLOY, - state: 'closed', - }) - .then(({data}) => _.first(data).number) - .then((lastDeployChecklistNumber) => GithubUtils.getActorWhoClosedIssue(lastDeployChecklistNumber)) - .then((actor) => { - // Create comment on each pull request (one after another to avoid throttling issues) - const deployMessage = getDeployMessage(actor, 'Deployed'); - _.reduce(prList, (promise, pr) => promise.then(() => commentPR(pr, deployMessage)), Promise.resolve()); - }); + // Find the previous deploy checklist + const {data: deployChecklists} = await GithubUtils.octokit.issues.listForRepo({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + labels: CONST.LABELS.STAGING_DEPLOY, + state: 'closed', + }); + const previousChecklistID = _.first(deployChecklists).number; + + // who closed the last deploy checklist? + const deployer = await GithubUtils.getActorWhoClosedIssue(previousChecklistID); + + // Create comment on each pull request (one at a time to avoid throttling issues) + const deployMessage = getDeployMessage(deployer, 'Deployed'); + for (const pr of prList) { + await commentPR(pr, deployMessage); + } + return; } // First find out if this is a normal staging deploy or a CP by looking at the commit message on the tag - return GithubUtils.octokit.repos - .listTags({ + const {data: recentTags} = await GithubUtils.octokit.repos.listTags({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + per_page: 100, + }); + const currentTag = _.find(recentTags, (tag) => tag.name === version); + if (!currentTag) { + const err = `Could not find tag matching ${version}`; + console.error(err); + core.setFailed(err); + return; + } + const {data: commit} = await GithubUtils.octokit.git.getCommit({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + commit_sha: currentTag.commit.sha, + }); + const isCP = /[\S\s]*\(cherry picked from commit .*\)/.test(commit.message); + + for (const prNumber of prList) { + /* + * Determine who the deployer for the PR is. The "deployer" for staging deploys is: + * 1. For regular staging deploys, the person who merged the PR. + * 2. For CPs, the person who committed the cherry-picked commit (not necessarily the author of the commit). + */ + const {data: pr} = await GithubUtils.octokit.pulls.get({ owner: CONST.GITHUB_OWNER, repo: CONST.APP_REPO, - per_page: 100, - }) - .then(({data}) => { - const tagSHA = _.find(data, (tag) => tag.name === version).commit.sha; - return GithubUtils.octokit.git.getCommit({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - commit_sha: tagSHA, - }); - }) - .then(({data}) => { - const isCP = /Merge pull request #\d+ from Expensify\/.*-?cherry-pick-staging-\d+/.test(data.message); - _.reduce( - prList, - (promise, PR) => - promise - - // Then, for each PR, find out who merged it and determine the deployer - .then(() => - GithubUtils.octokit.pulls.get({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - pull_number: PR, - }), - ) - .then((response) => { - /* - * The deployer for staging deploys is: - * 1. For regular staging deploys, the person who merged the PR. - * 2. For automatic CPs (using the label), the person who merged the PR. - * 3. For manual CPs (using the GH UI), the person who triggered the workflow - * (reflected in the branch name). - */ - let deployer = lodashGet(response, 'data.merged_by.login', ''); - const issueTitle = lodashGet(response, 'data.title', ''); - const CPActorMatches = data.message.match(/Merge pull request #\d+ from Expensify\/(.+)-cherry-pick-staging-\d+/); - if (_.isArray(CPActorMatches) && CPActorMatches.length === 2 && CPActorMatches[1] !== CONST.OS_BOTIFY) { - deployer = CPActorMatches[1]; - } - - // Finally, comment on the PR - const deployMessage = getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', issueTitle); - return commentPR(PR, deployMessage); - }), - Promise.resolve(), - ); + pull_number: prNumber, }); -}; + const deployer = isCP ? commit.committer.name : pr.merged_by.login; + + const title = pr.title; + const deployMessage = getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', title); + await commentPR(prNumber, deployMessage); + } +} if (require.main === require.cache[eval('__filename')]) { run(); @@ -238,7 +226,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -672,7 +660,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -8171,7 +8159,7 @@ var modules = [ __nccwpck_require__(9557), __nccwpck_require__(1155), __nccwpck_require__(1644), - __nccwpck_require__(373), + __nccwpck_require__(6657), __nccwpck_require__(1080), __nccwpck_require__(1012), __nccwpck_require__(9695), @@ -8395,7 +8383,7 @@ InternalDecoderCesu8.prototype.end = function() { /***/ }), -/***/ 373: +/***/ 6657: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; @@ -10455,7 +10443,7 @@ module.exports = Map; /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var mapCacheClear = __nccwpck_require__(1610), - mapCacheDelete = __nccwpck_require__(6657), + mapCacheDelete = __nccwpck_require__(5991), mapCacheGet = __nccwpck_require__(1372), mapCacheHas = __nccwpck_require__(609), mapCacheSet = __nccwpck_require__(5582); @@ -11297,7 +11285,7 @@ module.exports = mapCacheClear; /***/ }), -/***/ 6657: +/***/ 5991: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var getMapData = __nccwpck_require__(9980); @@ -16250,813 +16238,811 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js - return external_crypto_default().createHash('md5').update(bytes).digest(); -} -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; +} -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - if (buf) { - offset = offset || 0; - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - return buf; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - return external_crypto_default().createHash('sha1').update(bytes).digest(); +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); } -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js - +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); - return parseInt(uuid.substr(14, 1), 16); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js -/***/ }), -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - - return wrapper - - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ }), - -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { - -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; - -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; - -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; } -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; } -var isString = tagTester('String'); +_.VERSION = VERSION; -var isNumber = tagTester('Number'); - -var isDate = tagTester('Date'); - -var isRegExp = tagTester('RegExp'); +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -var isError = tagTester('Error'); +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -var isSymbol = tagTester('Symbol'); +_.prototype.toString = function() { + return String(this._wrapped); +}; -var isArrayBuffer = tagTester('ArrayBuffer'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -var isFunction = tagTester('Function'); -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -var isFunction$1 = isFunction; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -var hasObjectTag = tagTester('Object'); - -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); -var isDataView = tagTester('DataView'); -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); -} -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); -} -var isArguments = tagTester('Arguments'); -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; - }; +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; - } -} - -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; -} - -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); - -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); - -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); -} - -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); - -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); - -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); - } - }; -} - -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} - -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} - -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} - -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; -} - -_$1.VERSION = VERSION; - -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; - -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; - -_$1.prototype.toString = function() { - return String(this._wrapped); -}; - -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); -} - -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; - -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; } switch (className) { // These types are compared by value. @@ -17087,9 +17073,9 @@ function deepEq(a, b, aStack, bStack) { } var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; areArrays = true; } @@ -17099,8 +17085,8 @@ function deepEq(a, b, aStack, bStack) { // Objects with different constructors are not equivalent, but `Object`s or `Array`s // from different frames are. var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) && ('constructor' in a && 'constructor' in b)) { return false; } @@ -17141,7 +17127,7 @@ function deepEq(a, b, aStack, bStack) { while (length--) { // Deep compare each member key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; } } // Remove the first object from the stack of traversed objects. @@ -17155,6 +17141,11 @@ function isEqual(a, b) { return eq(a, b); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js + + + + // Retrieve all the enumerable property names of an object. function allKeys(obj) { if (!isObject(obj)) return []; @@ -17165,24 +17156,29 @@ function allKeys(obj) { return keys; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js + + + + // Since the regular `Object.prototype.toString` type tests don't work for // some types in IE 11, we use a fingerprinting heuristic instead, based // on the methods. It's not great, but it's the best we got. // The fingerprint method lists are defined below. function ie11fingerprint(methods) { - var length = getLength(methods); + var length = _getLength(methods); return function(obj) { if (obj == null) return false; // `Map`, `WeakMap` and `Set` have no enumerable keys. var keys = allKeys(obj); - if (getLength(keys)) return false; + if (_getLength(keys)) return false; for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; + if (!modules_isFunction(obj[methods[i]])) return false; } // If we are testing against `WeakMap`, we need to ensure that // `obj` doesn't have a `forEach` method in order to distinguish // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } @@ -17199,13 +17195,34 @@ var mapMethods = commonInit.concat(forEachName, mapTail), weakMapMethods = commonInit.concat(mapTail), setMethods = ['add'].concat(commonInit, forEachName, hasName); -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js -var isWeakSet = tagTester('WeakSet'); // Retrieve the values of an object's properties. function values(obj) { @@ -17218,6 +17235,9 @@ function values(obj) { return values; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + // Convert an object into a list of `[key, value]` pairs. // The opposite of `_.object` with one argument. function pairs(obj) { @@ -17230,6 +17250,9 @@ function pairs(obj) { return pairs; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js + + // Invert the keys and values of an object. The values must be serializable. function invert(obj) { var result = {}; @@ -17240,15 +17263,19 @@ function invert(obj) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js + + // Return a sorted list of the function names available on the object. function functions(obj) { var names = []; for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); + if (modules_isFunction(obj[key])) names.push(key); } return names.sort(); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js // An internal function for creating assigner functions. function createAssigner(keysFunc, defaults) { return function(obj) { @@ -17268,16 +17295,32 @@ function createAssigner(keysFunc, defaults) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js + + + // Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); +/* harmony default export */ const extend = (createAssigner(allKeys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js + + // Assigns a given object with all the own properties in the passed-in // object(s). // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + // Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + // Create a naked function reference for surrogate-prototype-swapping. function ctor() { @@ -17295,6 +17338,10 @@ function baseCreate(prototype) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js + + + // Creates an object that inherits from the given prototype object. // If additional properties are provided then they will be added to the // created object. @@ -17304,12 +17351,18 @@ function create(prototype, props) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js + + + + // Create a (shallow-cloned) duplicate of an object. function clone(obj) { if (!isObject(obj)) return obj; return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17318,19 +17371,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17341,34 +17403,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17378,15 +17454,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17409,31 +17490,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17448,9 +17551,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17459,6 +17567,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17467,6 +17578,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17476,10 +17588,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17497,32 +17613,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17559,7 +17696,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17613,7 +17750,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17622,14 +17759,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17637,11 +17778,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17650,13 +17792,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17668,6 +17817,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17686,26 +17840,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17713,12 +17883,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17731,11 +17901,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17743,31 +17918,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17815,6 +18004,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17853,13 +18046,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17867,6 +18064,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17880,6 +18078,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17889,6 +18088,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17902,9 +18102,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17916,11 +18124,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17929,18 +18141,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17948,10 +18170,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17963,7 +18190,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17973,29 +18200,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -18003,7 +18253,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -18016,10 +18266,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -18029,12 +18284,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -18054,12 +18314,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -18071,15 +18341,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18088,10 +18368,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18100,20 +18385,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18128,25 +18425,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18166,12 +18477,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18191,6 +18508,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18200,21 +18526,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18226,11 +18559,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18252,6 +18593,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18265,53 +18610,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18320,22 +18692,34 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + // Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in @@ -18344,521 +18728,951 @@ function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js index 708d001892c2..d03a947cdec8 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.js @@ -1,15 +1,10 @@ const _ = require('underscore'); -const lodashGet = require('lodash/get'); const core = require('@actions/core'); const {context} = require('@actions/github'); const CONST = require('../../../libs/CONST'); const ActionUtils = require('../../../libs/ActionUtils'); const GithubUtils = require('../../../libs/GithubUtils'); -const prList = ActionUtils.getJSONInput('PR_LIST', {required: true}); -const isProd = ActionUtils.getJSONInput('IS_PRODUCTION_DEPLOY', {required: true}); -const version = core.getInput('DEPLOY_VERSION', {required: true}); - /** * Return a nicely formatted message for the table based on the result of the GitHub action job * @@ -30,34 +25,6 @@ function getDeployTableMessage(platformResult) { } } -const androidResult = getDeployTableMessage(core.getInput('ANDROID', {required: true})); -const desktopResult = getDeployTableMessage(core.getInput('DESKTOP', {required: true})); -const iOSResult = getDeployTableMessage(core.getInput('IOS', {required: true})); -const webResult = getDeployTableMessage(core.getInput('WEB', {required: true})); - -const workflowURL = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`; - -/** - * @param {String} deployer - * @param {String} deployVerb - * @param {String} prTitle - * @returns {String} - */ -function getDeployMessage(deployer, deployVerb, prTitle) { - let message = `🚀 [${deployVerb}](${workflowURL}) to ${isProd ? 'production' : 'staging'}`; - message += ` by https://github.com/${deployer} in version: ${version} 🚀`; - message += `\n\n platform | result \n ---|--- \n🤖 android 🤖|${androidResult} \n🖥 desktop 🖥|${desktopResult}`; - message += `\n🍎 iOS 🍎|${iOSResult} \n🕸 web 🕸|${webResult}`; - - if (deployVerb === 'Cherry-picked' && !/no qa/gi.test(prTitle)) { - // eslint-disable-next-line max-len - message += - '\n\n@Expensify/applauseleads please QA this PR and check it off on the [deploy checklist](https://github.com/Expensify/App/issues?q=is%3Aopen+is%3Aissue+label%3AStagingDeployCash) if it passes.'; - } - - return message; -} - /** * Comment Single PR * @@ -65,87 +32,108 @@ function getDeployMessage(deployer, deployVerb, prTitle) { * @param {String} message * @returns {Promise} */ -function commentPR(PR, message) { - return GithubUtils.createComment(context.repo.repo, PR, message) - .then(() => console.log(`Comment created on #${PR} successfully 🎉`)) - .catch((err) => { - console.log(`Unable to write comment on #${PR} 😞`); - core.setFailed(err.message); - }); +async function commentPR(PR, message) { + try { + await GithubUtils.createComment(context.repo.repo, PR, message); + console.log(`Comment created on #${PR} successfully 🎉`); + } catch (err) { + console.log(`Unable to write comment on #${PR} 😞`); + core.setFailed(err.message); + } } -const run = function () { +const workflowURL = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`; + +async function run() { + const prList = _.map(ActionUtils.getJSONInput('PR_LIST', {required: true}), (num) => Number.parseInt(num, 10)); + const isProd = ActionUtils.getJSONInput('IS_PRODUCTION_DEPLOY', {required: true}); + const version = core.getInput('DEPLOY_VERSION', {required: true}); + + const androidResult = getDeployTableMessage(core.getInput('ANDROID', {required: true})); + const desktopResult = getDeployTableMessage(core.getInput('DESKTOP', {required: true})); + const iOSResult = getDeployTableMessage(core.getInput('IOS', {required: true})); + const webResult = getDeployTableMessage(core.getInput('WEB', {required: true})); + + /** + * @param {String} deployer + * @param {String} deployVerb + * @param {String} prTitle + * @returns {String} + */ + function getDeployMessage(deployer, deployVerb, prTitle) { + let message = `🚀 [${deployVerb}](${workflowURL}) to ${isProd ? 'production' : 'staging'}`; + message += ` by https://github.com/${deployer} in version: ${version} 🚀`; + message += `\n\nplatform | result\n---|---\n🤖 android 🤖|${androidResult}\n🖥 desktop 🖥|${desktopResult}`; + message += `\n🍎 iOS 🍎|${iOSResult}\n🕸 web 🕸|${webResult}`; + + if (deployVerb === 'Cherry-picked' && !/no ?qa/gi.test(prTitle)) { + // eslint-disable-next-line max-len + message += + '\n\n@Expensify/applauseleads please QA this PR and check it off on the [deploy checklist](https://github.com/Expensify/App/issues?q=is%3Aopen+is%3Aissue+label%3AStagingDeployCash) if it passes.'; + } + + return message; + } + if (isProd) { - // First find the deployer (who closed the last deploy checklist)? - return GithubUtils.octokit.issues - .listForRepo({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - labels: CONST.LABELS.STAGING_DEPLOY, - state: 'closed', - }) - .then(({data}) => _.first(data).number) - .then((lastDeployChecklistNumber) => GithubUtils.getActorWhoClosedIssue(lastDeployChecklistNumber)) - .then((actor) => { - // Create comment on each pull request (one after another to avoid throttling issues) - const deployMessage = getDeployMessage(actor, 'Deployed'); - _.reduce(prList, (promise, pr) => promise.then(() => commentPR(pr, deployMessage)), Promise.resolve()); - }); + // Find the previous deploy checklist + const {data: deployChecklists} = await GithubUtils.octokit.issues.listForRepo({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + labels: CONST.LABELS.STAGING_DEPLOY, + state: 'closed', + }); + const previousChecklistID = _.first(deployChecklists).number; + + // who closed the last deploy checklist? + const deployer = await GithubUtils.getActorWhoClosedIssue(previousChecklistID); + + // Create comment on each pull request (one at a time to avoid throttling issues) + const deployMessage = getDeployMessage(deployer, 'Deployed'); + for (const pr of prList) { + await commentPR(pr, deployMessage); + } + return; } // First find out if this is a normal staging deploy or a CP by looking at the commit message on the tag - return GithubUtils.octokit.repos - .listTags({ + const {data: recentTags} = await GithubUtils.octokit.repos.listTags({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + per_page: 100, + }); + const currentTag = _.find(recentTags, (tag) => tag.name === version); + if (!currentTag) { + const err = `Could not find tag matching ${version}`; + console.error(err); + core.setFailed(err); + return; + } + const {data: commit} = await GithubUtils.octokit.git.getCommit({ + owner: CONST.GITHUB_OWNER, + repo: CONST.APP_REPO, + commit_sha: currentTag.commit.sha, + }); + const isCP = /[\S\s]*\(cherry picked from commit .*\)/.test(commit.message); + + for (const prNumber of prList) { + /* + * Determine who the deployer for the PR is. The "deployer" for staging deploys is: + * 1. For regular staging deploys, the person who merged the PR. + * 2. For CPs, the person who committed the cherry-picked commit (not necessarily the author of the commit). + */ + const {data: pr} = await GithubUtils.octokit.pulls.get({ owner: CONST.GITHUB_OWNER, repo: CONST.APP_REPO, - per_page: 100, - }) - .then(({data}) => { - const tagSHA = _.find(data, (tag) => tag.name === version).commit.sha; - return GithubUtils.octokit.git.getCommit({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - commit_sha: tagSHA, - }); - }) - .then(({data}) => { - const isCP = /Merge pull request #\d+ from Expensify\/.*-?cherry-pick-staging-\d+/.test(data.message); - _.reduce( - prList, - (promise, PR) => - promise - - // Then, for each PR, find out who merged it and determine the deployer - .then(() => - GithubUtils.octokit.pulls.get({ - owner: CONST.GITHUB_OWNER, - repo: CONST.APP_REPO, - pull_number: PR, - }), - ) - .then((response) => { - /* - * The deployer for staging deploys is: - * 1. For regular staging deploys, the person who merged the PR. - * 2. For automatic CPs (using the label), the person who merged the PR. - * 3. For manual CPs (using the GH UI), the person who triggered the workflow - * (reflected in the branch name). - */ - let deployer = lodashGet(response, 'data.merged_by.login', ''); - const issueTitle = lodashGet(response, 'data.title', ''); - const CPActorMatches = data.message.match(/Merge pull request #\d+ from Expensify\/(.+)-cherry-pick-staging-\d+/); - if (_.isArray(CPActorMatches) && CPActorMatches.length === 2 && CPActorMatches[1] !== CONST.OS_BOTIFY) { - deployer = CPActorMatches[1]; - } - - // Finally, comment on the PR - const deployMessage = getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', issueTitle); - return commentPR(PR, deployMessage); - }), - Promise.resolve(), - ); + pull_number: prNumber, }); -}; + const deployer = isCP ? commit.committer.name : pr.merged_by.login; + + const title = pr.title; + const deployMessage = getDeployMessage(deployer, isCP ? 'Cherry-picked' : 'Deployed', title); + await commentPR(prNumber, deployMessage); + } +} if (require.main === module) { run(); diff --git a/.github/actions/javascript/postTestBuildComment/index.js b/.github/actions/javascript/postTestBuildComment/index.js index 5da6c7ed667a..f0bb4495f838 100644 --- a/.github/actions/javascript/postTestBuildComment/index.js +++ b/.github/actions/javascript/postTestBuildComment/index.js @@ -105,7 +105,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -539,7 +539,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16117,1066 +16117,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17185,19 +17250,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17208,34 +17282,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17245,15 +17333,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17276,31 +17369,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17315,9 +17430,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17326,6 +17446,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17334,6 +17457,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17343,10 +17467,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17364,32 +17492,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17426,7 +17575,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17480,7 +17629,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17489,14 +17638,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17504,11 +17657,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17517,13 +17671,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17535,6 +17696,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17553,26 +17719,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17580,12 +17762,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17598,11 +17780,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17610,31 +17797,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17682,6 +17883,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17720,13 +17925,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17734,6 +17943,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17747,6 +17957,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17756,6 +17967,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17769,9 +17981,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17783,11 +18003,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17796,18 +18020,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17815,10 +18049,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17830,7 +18069,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17840,29 +18079,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17870,7 +18132,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17883,10 +18145,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17896,12 +18163,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17921,12 +18193,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17938,15 +18220,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17955,10 +18247,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17967,20 +18264,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17995,25 +18304,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18033,12 +18356,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18058,6 +18387,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18067,21 +18405,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18093,11 +18438,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18119,6 +18472,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18132,53 +18489,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18187,545 +18571,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/reopenIssueWithComment/index.js b/.github/actions/javascript/reopenIssueWithComment/index.js index 3efa2664a4c5..076f1c53434b 100644 --- a/.github/actions/javascript/reopenIssueWithComment/index.js +++ b/.github/actions/javascript/reopenIssueWithComment/index.js @@ -74,7 +74,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -508,7 +508,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16042,1066 +16042,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17110,19 +17175,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17133,34 +17207,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17170,15 +17258,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17201,31 +17294,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17240,9 +17355,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17251,6 +17371,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17259,6 +17382,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17268,10 +17392,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17289,32 +17417,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17351,7 +17500,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17405,7 +17554,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17414,14 +17563,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17429,11 +17582,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17442,13 +17596,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17460,6 +17621,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17478,26 +17644,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17505,12 +17687,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17523,11 +17705,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17535,31 +17722,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17607,6 +17808,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17645,13 +17850,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17659,6 +17868,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17672,6 +17882,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17681,6 +17892,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17694,9 +17906,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17708,11 +17928,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17721,18 +17945,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17740,10 +17974,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17755,7 +17994,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17765,29 +18004,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17795,7 +18057,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17808,10 +18070,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17821,12 +18088,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17846,12 +18118,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17863,15 +18145,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17880,10 +18172,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17892,20 +18189,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17920,25 +18229,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17958,12 +18281,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -17983,6 +18312,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -17992,21 +18330,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18018,11 +18363,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18044,6 +18397,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18057,53 +18414,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18112,545 +18496,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/reviewerChecklist/index.js b/.github/actions/javascript/reviewerChecklist/index.js index fc4ba728220b..3e35ee4f7c93 100644 --- a/.github/actions/javascript/reviewerChecklist/index.js +++ b/.github/actions/javascript/reviewerChecklist/index.js @@ -140,7 +140,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -574,7 +574,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16152,1066 +16152,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17220,19 +17285,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17243,34 +17317,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17280,15 +17368,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17311,31 +17404,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17350,9 +17465,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17361,6 +17481,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17369,6 +17492,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17378,10 +17502,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17399,32 +17527,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17461,7 +17610,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17515,7 +17664,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17524,14 +17673,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17539,11 +17692,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17552,13 +17706,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17570,6 +17731,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17588,26 +17754,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17615,12 +17797,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17633,11 +17815,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17645,31 +17832,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17717,6 +17918,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17755,13 +17960,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17769,6 +17978,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17782,6 +17992,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17791,6 +18002,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17804,9 +18016,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17818,11 +18038,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17831,18 +18055,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17850,10 +18084,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17865,7 +18104,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17875,29 +18114,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17905,7 +18167,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17918,10 +18180,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17931,12 +18198,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17956,12 +18228,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17973,15 +18255,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17990,10 +18282,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -18002,20 +18299,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -18030,25 +18339,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -18068,12 +18391,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18093,6 +18422,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18102,21 +18440,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18128,11 +18473,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18154,6 +18507,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18167,53 +18524,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18222,545 +18606,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/actions/javascript/verifySignedCommits/index.js b/.github/actions/javascript/verifySignedCommits/index.js index df8ca5b31bad..115e1ccd1e4b 100644 --- a/.github/actions/javascript/verifySignedCommits/index.js +++ b/.github/actions/javascript/verifySignedCommits/index.js @@ -8,7 +8,7 @@ module.exports = /***/ 5740: /***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const core = __nccwpck_require__(2186); const github = __nccwpck_require__(5438); const CONST = __nccwpck_require__(4097); @@ -63,7 +63,7 @@ module.exports = CONST; /***/ 7999: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const _ = __nccwpck_require__(3571); +const _ = __nccwpck_require__(2947); const lodashGet = __nccwpck_require__(6908); const core = __nccwpck_require__(2186); const {GitHub, getOctokitOptions} = __nccwpck_require__(3030); @@ -497,7 +497,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { @@ -16075,1066 +16075,1131 @@ exports.debug = debug; // for test /***/ }), -/***/ 5030: -/***/ ((__unused_webpack_module, exports) => { +/***/ 2947: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => { "use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "VERSION": () => /* reexport */ VERSION, + "after": () => /* reexport */ after, + "all": () => /* reexport */ every, + "allKeys": () => /* reexport */ allKeys, + "any": () => /* reexport */ some, + "assign": () => /* reexport */ extendOwn, + "before": () => /* reexport */ before, + "bind": () => /* reexport */ bind, + "bindAll": () => /* reexport */ bindAll, + "chain": () => /* reexport */ chain, + "chunk": () => /* reexport */ chunk, + "clone": () => /* reexport */ clone, + "collect": () => /* reexport */ map, + "compact": () => /* reexport */ compact, + "compose": () => /* reexport */ compose, + "constant": () => /* reexport */ constant, + "contains": () => /* reexport */ contains, + "countBy": () => /* reexport */ countBy, + "create": () => /* reexport */ create, + "debounce": () => /* reexport */ debounce, + "default": () => /* reexport */ index_default, + "defaults": () => /* reexport */ defaults, + "defer": () => /* reexport */ defer, + "delay": () => /* reexport */ delay, + "detect": () => /* reexport */ find, + "difference": () => /* reexport */ difference, + "drop": () => /* reexport */ rest, + "each": () => /* reexport */ each, + "escape": () => /* reexport */ modules_escape, + "every": () => /* reexport */ every, + "extend": () => /* reexport */ extend, + "extendOwn": () => /* reexport */ extendOwn, + "filter": () => /* reexport */ filter, + "find": () => /* reexport */ find, + "findIndex": () => /* reexport */ findIndex, + "findKey": () => /* reexport */ findKey, + "findLastIndex": () => /* reexport */ findLastIndex, + "findWhere": () => /* reexport */ findWhere, + "first": () => /* reexport */ first, + "flatten": () => /* reexport */ flatten_flatten, + "foldl": () => /* reexport */ reduce, + "foldr": () => /* reexport */ reduceRight, + "forEach": () => /* reexport */ each, + "functions": () => /* reexport */ functions, + "get": () => /* reexport */ get, + "groupBy": () => /* reexport */ groupBy, + "has": () => /* reexport */ has_has, + "head": () => /* reexport */ first, + "identity": () => /* reexport */ identity, + "include": () => /* reexport */ contains, + "includes": () => /* reexport */ contains, + "indexBy": () => /* reexport */ indexBy, + "indexOf": () => /* reexport */ indexOf, + "initial": () => /* reexport */ initial, + "inject": () => /* reexport */ reduce, + "intersection": () => /* reexport */ intersection, + "invert": () => /* reexport */ invert, + "invoke": () => /* reexport */ invoke, + "isArguments": () => /* reexport */ modules_isArguments, + "isArray": () => /* reexport */ isArray, + "isArrayBuffer": () => /* reexport */ isArrayBuffer, + "isBoolean": () => /* reexport */ isBoolean, + "isDataView": () => /* reexport */ modules_isDataView, + "isDate": () => /* reexport */ isDate, + "isElement": () => /* reexport */ isElement, + "isEmpty": () => /* reexport */ isEmpty, + "isEqual": () => /* reexport */ isEqual, + "isError": () => /* reexport */ isError, + "isFinite": () => /* reexport */ isFinite_isFinite, + "isFunction": () => /* reexport */ modules_isFunction, + "isMap": () => /* reexport */ isMap, + "isMatch": () => /* reexport */ isMatch, + "isNaN": () => /* reexport */ isNaN_isNaN, + "isNull": () => /* reexport */ isNull, + "isNumber": () => /* reexport */ isNumber, + "isObject": () => /* reexport */ isObject, + "isRegExp": () => /* reexport */ isRegExp, + "isSet": () => /* reexport */ isSet, + "isString": () => /* reexport */ isString, + "isSymbol": () => /* reexport */ isSymbol, + "isTypedArray": () => /* reexport */ modules_isTypedArray, + "isUndefined": () => /* reexport */ isUndefined, + "isWeakMap": () => /* reexport */ isWeakMap, + "isWeakSet": () => /* reexport */ isWeakSet, + "iteratee": () => /* reexport */ iteratee, + "keys": () => /* reexport */ keys, + "last": () => /* reexport */ last, + "lastIndexOf": () => /* reexport */ lastIndexOf, + "map": () => /* reexport */ map, + "mapObject": () => /* reexport */ mapObject, + "matcher": () => /* reexport */ matcher, + "matches": () => /* reexport */ matcher, + "max": () => /* reexport */ max, + "memoize": () => /* reexport */ memoize, + "methods": () => /* reexport */ functions, + "min": () => /* reexport */ min, + "mixin": () => /* reexport */ mixin, + "negate": () => /* reexport */ negate, + "noop": () => /* reexport */ noop, + "now": () => /* reexport */ now, + "object": () => /* reexport */ object, + "omit": () => /* reexport */ omit, + "once": () => /* reexport */ once, + "pairs": () => /* reexport */ pairs, + "partial": () => /* reexport */ modules_partial, + "partition": () => /* reexport */ partition, + "pick": () => /* reexport */ pick, + "pluck": () => /* reexport */ pluck, + "property": () => /* reexport */ property, + "propertyOf": () => /* reexport */ propertyOf, + "random": () => /* reexport */ random, + "range": () => /* reexport */ range, + "reduce": () => /* reexport */ reduce, + "reduceRight": () => /* reexport */ reduceRight, + "reject": () => /* reexport */ reject, + "rest": () => /* reexport */ rest, + "restArguments": () => /* reexport */ restArguments, + "result": () => /* reexport */ result, + "sample": () => /* reexport */ sample, + "select": () => /* reexport */ filter, + "shuffle": () => /* reexport */ shuffle, + "size": () => /* reexport */ size, + "some": () => /* reexport */ some, + "sortBy": () => /* reexport */ sortBy, + "sortedIndex": () => /* reexport */ sortedIndex, + "tail": () => /* reexport */ rest, + "take": () => /* reexport */ first, + "tap": () => /* reexport */ tap, + "template": () => /* reexport */ template, + "templateSettings": () => /* reexport */ templateSettings, + "throttle": () => /* reexport */ throttle, + "times": () => /* reexport */ times, + "toArray": () => /* reexport */ toArray, + "toPath": () => /* reexport */ toPath, + "transpose": () => /* reexport */ unzip, + "unescape": () => /* reexport */ modules_unescape, + "union": () => /* reexport */ union, + "uniq": () => /* reexport */ uniq, + "unique": () => /* reexport */ uniq, + "uniqueId": () => /* reexport */ uniqueId, + "unzip": () => /* reexport */ unzip, + "values": () => /* reexport */ values, + "where": () => /* reexport */ where, + "without": () => /* reexport */ without, + "wrap": () => /* reexport */ wrap, + "zip": () => /* reexport */ zip +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); - -function getUserAgent() { - if (typeof navigator === "object" && "userAgent" in navigator) { - return navigator.userAgent; - } +// NAMESPACE OBJECT: ./node_modules/underscore/modules/index.js +var modules_namespaceObject = {}; +__nccwpck_require__.r(modules_namespaceObject); +__nccwpck_require__.d(modules_namespaceObject, { + "VERSION": () => VERSION, + "after": () => after, + "all": () => every, + "allKeys": () => allKeys, + "any": () => some, + "assign": () => extendOwn, + "before": () => before, + "bind": () => bind, + "bindAll": () => bindAll, + "chain": () => chain, + "chunk": () => chunk, + "clone": () => clone, + "collect": () => map, + "compact": () => compact, + "compose": () => compose, + "constant": () => constant, + "contains": () => contains, + "countBy": () => countBy, + "create": () => create, + "debounce": () => debounce, + "default": () => underscore_array_methods, + "defaults": () => defaults, + "defer": () => defer, + "delay": () => delay, + "detect": () => find, + "difference": () => difference, + "drop": () => rest, + "each": () => each, + "escape": () => modules_escape, + "every": () => every, + "extend": () => extend, + "extendOwn": () => extendOwn, + "filter": () => filter, + "find": () => find, + "findIndex": () => findIndex, + "findKey": () => findKey, + "findLastIndex": () => findLastIndex, + "findWhere": () => findWhere, + "first": () => first, + "flatten": () => flatten_flatten, + "foldl": () => reduce, + "foldr": () => reduceRight, + "forEach": () => each, + "functions": () => functions, + "get": () => get, + "groupBy": () => groupBy, + "has": () => has_has, + "head": () => first, + "identity": () => identity, + "include": () => contains, + "includes": () => contains, + "indexBy": () => indexBy, + "indexOf": () => indexOf, + "initial": () => initial, + "inject": () => reduce, + "intersection": () => intersection, + "invert": () => invert, + "invoke": () => invoke, + "isArguments": () => modules_isArguments, + "isArray": () => isArray, + "isArrayBuffer": () => isArrayBuffer, + "isBoolean": () => isBoolean, + "isDataView": () => modules_isDataView, + "isDate": () => isDate, + "isElement": () => isElement, + "isEmpty": () => isEmpty, + "isEqual": () => isEqual, + "isError": () => isError, + "isFinite": () => isFinite_isFinite, + "isFunction": () => modules_isFunction, + "isMap": () => isMap, + "isMatch": () => isMatch, + "isNaN": () => isNaN_isNaN, + "isNull": () => isNull, + "isNumber": () => isNumber, + "isObject": () => isObject, + "isRegExp": () => isRegExp, + "isSet": () => isSet, + "isString": () => isString, + "isSymbol": () => isSymbol, + "isTypedArray": () => modules_isTypedArray, + "isUndefined": () => isUndefined, + "isWeakMap": () => isWeakMap, + "isWeakSet": () => isWeakSet, + "iteratee": () => iteratee, + "keys": () => keys, + "last": () => last, + "lastIndexOf": () => lastIndexOf, + "map": () => map, + "mapObject": () => mapObject, + "matcher": () => matcher, + "matches": () => matcher, + "max": () => max, + "memoize": () => memoize, + "methods": () => functions, + "min": () => min, + "mixin": () => mixin, + "negate": () => negate, + "noop": () => noop, + "now": () => now, + "object": () => object, + "omit": () => omit, + "once": () => once, + "pairs": () => pairs, + "partial": () => modules_partial, + "partition": () => partition, + "pick": () => pick, + "pluck": () => pluck, + "property": () => property, + "propertyOf": () => propertyOf, + "random": () => random, + "range": () => range, + "reduce": () => reduce, + "reduceRight": () => reduceRight, + "reject": () => reject, + "rest": () => rest, + "restArguments": () => restArguments, + "result": () => result, + "sample": () => sample, + "select": () => filter, + "shuffle": () => shuffle, + "size": () => size, + "some": () => some, + "sortBy": () => sortBy, + "sortedIndex": () => sortedIndex, + "tail": () => rest, + "take": () => first, + "tap": () => tap, + "template": () => template, + "templateSettings": () => templateSettings, + "throttle": () => throttle, + "times": () => times, + "toArray": () => toArray, + "toPath": () => toPath, + "transpose": () => unzip, + "unescape": () => modules_unescape, + "union": () => union, + "uniq": () => uniq, + "unique": () => uniq, + "uniqueId": () => uniqueId, + "unzip": () => unzip, + "values": () => values, + "where": () => where, + "without": () => without, + "wrap": () => wrap, + "zip": () => zip +}); - if (typeof process === "object" && "version" in process) { - return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_setup.js +// Current version. +var VERSION = '1.13.6'; - return ""; -} +// Establish the root object, `window` (`self`) in the browser, `global` +// on the server, or `this` in some virtual machines. We use `self` +// instead of `window` for `WebWorker` support. +var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global) || + Function('return this')() || + {}; -exports.getUserAgent = getUserAgent; -//# sourceMappingURL=index.js.map +// Save bytes in the minified (but not gzipped) version: +var ArrayProto = Array.prototype, ObjProto = Object.prototype; +var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// Create quick reference variables for speed access to core prototypes. +var push = ArrayProto.push, + slice = ArrayProto.slice, + _setup_toString = ObjProto.toString, + _setup_hasOwnProperty = ObjProto.hasOwnProperty; -/***/ }), +// Modern feature detection. +var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; -/***/ 9521: -/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { +// All **ECMAScript 5+** native function implementations that we hope to use +// are declared here. +var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; -"use strict"; -// ESM COMPAT FLAG -__nccwpck_require__.r(__webpack_exports__); +// Create references to these builtin functions because we override them. +var _isNaN = isNaN, + _isFinite = isFinite; -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "NIL": () => /* reexport */ nil, - "parse": () => /* reexport */ esm_node_parse, - "stringify": () => /* reexport */ esm_node_stringify, - "v1": () => /* reexport */ esm_node_v1, - "v3": () => /* reexport */ esm_node_v3, - "v4": () => /* reexport */ esm_node_v4, - "v5": () => /* reexport */ esm_node_v5, - "validate": () => /* reexport */ esm_node_validate, - "version": () => /* reexport */ esm_node_version -}); +// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. +var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); +var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; -// CONCATENATED MODULE: external "crypto" -const external_crypto_namespaceObject = require("crypto");; -var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); +// The largest integer that can be represented exactly. +var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/restArguments.js +// Some functions take a variable number of arguments, or a few expected +// arguments at the beginning and then a variable number of values to operate +// on. This helper accumulates all remaining arguments past the function’s +// argument length (or an explicit `startIndex`), into an array that becomes +// the last argument. Similar to ES6’s "rest parameter". +function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; +} -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate +// CONCATENATED MODULE: ./node_modules/underscore/modules/isObject.js +// Is a given variable an object? +function isObject(obj) { + var type = typeof obj; + return type === 'function' || (type === 'object' && !!obj); +} -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - external_crypto_default().randomFillSync(rnds8Pool); - poolPtr = 0; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNull.js +// Is a given value equal to null? +function isNull(obj) { + return obj === null; +} - return rnds8Pool.slice(poolPtr, poolPtr += 16); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isUndefined.js +// Is a given variable undefined? +function isUndefined(obj) { + return obj === void 0; } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js -/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isBoolean.js -function validate(uuid) { - return typeof uuid === 'string' && regex.test(uuid); + +// Is a given value a boolean? +function isBoolean(obj) { + return obj === true || obj === false || _setup_toString.call(obj) === '[object Boolean]'; } -/* harmony default export */ const esm_node_validate = (validate); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isElement.js +// Is a given value a DOM element? +function isElement(obj) { + return !!(obj && obj.nodeType === 1); +} -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ +// CONCATENATED MODULE: ./node_modules/underscore/modules/_tagTester.js -const byteToHex = []; -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); +// Internal function for creating a `toString`-based type tester. +function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return _setup_toString.call(obj) === tag; + }; } -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields +// CONCATENATED MODULE: ./node_modules/underscore/modules/isString.js - if (!esm_node_validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - return uuid; -} +/* harmony default export */ const isString = (tagTester('String')); -/* harmony default export */ const esm_node_stringify = (stringify); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNumber.js - // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; +/* harmony default export */ const isNumber = (tagTester('Number')); -let _clockseq; // Previous uuid creation time +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDate.js -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details +/* harmony default export */ const isDate = (tagTester('Date')); -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 +// CONCATENATED MODULE: ./node_modules/underscore/modules/isRegExp.js - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } +/* harmony default export */ const isRegExp = (tagTester('RegExp')); - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. +// CONCATENATED MODULE: ./node_modules/underscore/modules/isError.js - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock +/* harmony default export */ const isError = (tagTester('Error')); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSymbol.js - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval +/* harmony default export */ const isSymbol = (tagTester('Symbol')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArrayBuffer.js - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested +/* harmony default export */ const isArrayBuffer = (tagTester('ArrayBuffer')); - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFunction.js - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; // `time_low` - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` +var isFunction = tagTester('Function'); - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` +// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old +// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). +var nodelist = root.document && root.document.childNodes; +if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; +} - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version +/* harmony default export */ const modules_isFunction = (isFunction); - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) +// CONCATENATED MODULE: ./node_modules/underscore/modules/_hasObjectTag.js - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - b[i++] = clockseq & 0xff; // `node` +/* harmony default export */ const _hasObjectTag = (tagTester('Object')); - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_stringTagBug.js - return buf || esm_node_stringify(b); -} -/* harmony default export */ const esm_node_v1 = (v1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js +// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. +// In IE 11, the most common among them, this problem also applies to +// `Map`, `WeakMap` and `Set`. +var hasStringTagBug = ( + supportsDataView && _hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && _hasObjectTag(new Map)); -function parse(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isDataView.js - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) +var isDataView = tagTester('DataView'); - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; +// In IE 10 - Edge 13, we need a different heuristic +// to determine whether an object is a `DataView`. +function ie10IsDataView(obj) { + return obj != null && modules_isFunction(obj.getInt8) && isArrayBuffer(obj.buffer); } -/* harmony default export */ const esm_node_parse = (parse); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js +/* harmony default export */ const modules_isDataView = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArray.js -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - const bytes = []; +// Is a given value an array? +// Delegates to ECMA5's native `Array.isArray`. +/* harmony default export */ const isArray = (nativeIsArray || tagTester('Array')); - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_has.js - return bytes; + +// Internal function to check whether `key` is an own property name of `obj`. +function has(obj, key) { + return obj != null && _setup_hasOwnProperty.call(obj, key); } -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -/* harmony default export */ function v35(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isArguments.js - if (typeof namespace === 'string') { - namespace = esm_node_parse(namespace); - } - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` +var isArguments = tagTester('Arguments'); - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; +// Define a fallback version of the method in browsers (ahem, IE < 9), where +// there isn't any inspectable "Arguments" type. +(function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } +}()); - if (buf) { - offset = offset || 0; +/* harmony default export */ const modules_isArguments = (isArguments); - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isFinite.js - return buf; - } - return esm_node_stringify(bytes); - } // Function#name is not settable on some platforms (#270) +// Is a given object a finite number? +function isFinite_isFinite(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); +} - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support +// CONCATENATED MODULE: ./node_modules/underscore/modules/isNaN.js - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; + +// Is the given value `NaN`? +function isNaN_isNaN(obj) { + return isNumber(obj) && _isNaN(obj); } -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/constant.js +// Predicate-generating function. Often useful outside of Underscore. +function constant(value) { + return function() { + return value; + }; +} -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createSizePropertyCheck.js + + +// Common internal logic for `isArrayLike` and `isBufferLike`. +function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; } +} - return external_crypto_default().createHash('md5').update(bytes).digest(); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_shallowProperty.js +// Internal helper to generate a function to obtain property `key` from `obj`. +function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; } -/* harmony default export */ const esm_node_md5 = (md5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getByteLength.js -const v3 = v35('v3', 0x30, esm_node_md5); -/* harmony default export */ const esm_node_v3 = (v3); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js +// Internal helper to obtain the `byteLength` property of an object. +/* harmony default export */ const _getByteLength = (shallowProperty('byteLength')); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isBufferLike.js -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided +// Internal helper to determine whether we should spend extensive checks against +// `ArrayBuffer` et al. +/* harmony default export */ const _isBufferLike = (createSizePropertyCheck(_getByteLength)); - if (buf) { - offset = offset || 0; +// CONCATENATED MODULE: ./node_modules/underscore/modules/isTypedArray.js - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return esm_node_stringify(rnds); -} -/* harmony default export */ const esm_node_v4 = (v4); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js +// Is a given value a typed array? +var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; +function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !modules_isDataView(obj)) : + _isBufferLike(obj) && typedArrayPattern.test(_setup_toString.call(obj)); +} -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } +/* harmony default export */ const modules_isTypedArray = (supportsArrayBuffer ? isTypedArray : constant(false)); - return external_crypto_default().createHash('sha1').update(bytes).digest(); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/_getLength.js -/* harmony default export */ const esm_node_sha1 = (sha1); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js +// Internal helper to obtain the `length` property of an object. +/* harmony default export */ const _getLength = (shallowProperty('length')); -const v5 = v35('v5', 0x50, esm_node_sha1); -/* harmony default export */ const esm_node_v5 = (v5); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js -/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js +// CONCATENATED MODULE: ./node_modules/underscore/modules/_collectNonEnumProps.js -function version(uuid) { - if (!esm_node_validate(uuid)) { - throw TypeError('Invalid UUID'); - } - return parseInt(uuid.substr(14, 1), 16); -} -/* harmony default export */ const esm_node_version = (version); -// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js +// Internal helper to create a simple lookup structure. +// `collectNonEnumProps` used to depend on `_.contains`, but this led to +// circular imports. `emulatedSet` is a one-off solution that only works for +// arrays of strings. +function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key] === true; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; +} +// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't +// be iterated by `for key in ...` and thus missed. Extends `keys` in place if +// needed. +function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (modules_isFunction(constructor) && constructor.prototype) || ObjProto; + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } +} +// CONCATENATED MODULE: ./node_modules/underscore/modules/keys.js +// Retrieve the names of an object's own properties. +// Delegates to **ECMAScript 5**'s native `Object.keys`. +function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; +} -/***/ }), +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEmpty.js -/***/ 2940: -/***/ ((module) => { -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - return wrapper - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } +// Is a given array, string, or object empty? +// An "empty" object has no enumerable own-properties. +function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = _getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || modules_isArguments(obj) + )) return length === 0; + return _getLength(keys(obj)) === 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMatch.js -/***/ }), -/***/ 1641: -/***/ ((__unused_webpack_module, exports) => { +// Returns whether an object has a given set of `key:value` pairs. +function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; +} -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore.js -Object.defineProperty(exports, "__esModule", ({ value: true })); - -// Current version. -var VERSION = '1.13.4'; - -// Establish the root object, `window` (`self`) in the browser, `global` -// on the server, or `this` in some virtual machines. We use `self` -// instead of `window` for `WebWorker` support. -var root = (typeof self == 'object' && self.self === self && self) || - (typeof global == 'object' && global.global === global && global) || - Function('return this')() || - {}; -// Save bytes in the minified (but not gzipped) version: -var ArrayProto = Array.prototype, ObjProto = Object.prototype; -var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; +// If Underscore is called as a function, it returns a wrapped object that can +// be used OO-style. This wrapper holds altered versions of all functions added +// through `_.mixin`. Wrapped objects may be chained. +function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; +} -// Create quick reference variables for speed access to core prototypes. -var push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; +_.VERSION = VERSION; -// Modern feature detection. -var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', - supportsDataView = typeof DataView !== 'undefined'; +// Extracts the result from a wrapped and chained object. +_.prototype.value = function() { + return this._wrapped; +}; -// All **ECMAScript 5+** native function implementations that we hope to use -// are declared here. -var nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeCreate = Object.create, - nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; +// Provide unwrapping proxies for some methods used in engine operations +// such as arithmetic and JSON stringification. +_.prototype.valueOf = _.prototype.toJSON = _.prototype.value; -// Create references to these builtin functions because we override them. -var _isNaN = isNaN, - _isFinite = isFinite; +_.prototype.toString = function() { + return String(this._wrapped); +}; -// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. -var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); -var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toBufferView.js -// The largest integer that can be represented exactly. -var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; -// Some functions take a variable number of arguments, or a few expected -// arguments at the beginning and then a variable number of values to operate -// on. This helper accumulates all remaining arguments past the function’s -// argument length (or an explicit `startIndex`), into an array that becomes -// the last argument. Similar to ES6’s "rest parameter". -function restArguments(func, startIndex) { - startIndex = startIndex == null ? func.length - 1 : +startIndex; - return function() { - var length = Math.max(arguments.length - startIndex, 0), - rest = Array(length), - index = 0; - for (; index < length; index++) { - rest[index] = arguments[index + startIndex]; - } - switch (startIndex) { - case 0: return func.call(this, rest); - case 1: return func.call(this, arguments[0], rest); - case 2: return func.call(this, arguments[0], arguments[1], rest); - } - var args = Array(startIndex + 1); - for (index = 0; index < startIndex; index++) { - args[index] = arguments[index]; - } - args[startIndex] = rest; - return func.apply(this, args); - }; +// Internal function to wrap or shallow-copy an ArrayBuffer, +// typed array or DataView to a new view, reusing the buffer. +function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + _getByteLength(bufferSource) + ); } -// Is a given variable an object? -function isObject(obj) { - var type = typeof obj; - return type === 'function' || (type === 'object' && !!obj); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/isEqual.js -// Is a given value equal to null? -function isNull(obj) { - return obj === null; -} -// Is a given variable undefined? -function isUndefined(obj) { - return obj === void 0; -} -// Is a given value a boolean? -function isBoolean(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; -} -// Is a given value a DOM element? -function isElement(obj) { - return !!(obj && obj.nodeType === 1); -} -// Internal function for creating a `toString`-based type tester. -function tagTester(name) { - var tag = '[object ' + name + ']'; - return function(obj) { - return toString.call(obj) === tag; - }; -} -var isString = tagTester('String'); -var isNumber = tagTester('Number'); -var isDate = tagTester('Date'); -var isRegExp = tagTester('RegExp'); -var isError = tagTester('Error'); -var isSymbol = tagTester('Symbol'); +// We use this string twice, so give it a name for minification. +var tagDataView = '[object DataView]'; -var isArrayBuffer = tagTester('ArrayBuffer'); +// Internal recursive comparison function for `_.isEqual`. +function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); +} -var isFunction = tagTester('Function'); +// Internal recursive comparison function for `_.isEqual`. +function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = _setup_toString.call(a); + if (className !== _setup_toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && modules_isDataView(a)) { + if (!modules_isDataView(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } -// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old -// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). -var nodelist = root.document && root.document.childNodes; -if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { - isFunction = function(obj) { - return typeof obj == 'function' || false; - }; -} + var areArrays = className === '[object Array]'; + if (!areArrays && modules_isTypedArray(a)) { + var byteLength = _getByteLength(a); + if (byteLength !== _getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; -var isFunction$1 = isFunction; + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(modules_isFunction(aCtor) && aCtor instanceof aCtor && + modules_isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. -var hasObjectTag = tagTester('Object'); + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } -// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. -// In IE 11, the most common among them, this problem also applies to -// `Map`, `WeakMap` and `Set`. -var hasStringTagBug = ( - supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) - ), - isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); -var isDataView = tagTester('DataView'); + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; +} -// In IE 10 - Edge 13, we need a different heuristic -// to determine whether an object is a `DataView`. -function ie10IsDataView(obj) { - return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); +// Perform a deep comparison to check if two objects are equal. +function isEqual(a, b) { + return eq(a, b); } -var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); +// CONCATENATED MODULE: ./node_modules/underscore/modules/allKeys.js -// Is a given value an array? -// Delegates to ECMA5's native `Array.isArray`. -var isArray = nativeIsArray || tagTester('Array'); -// Internal function to check whether `key` is an own property name of `obj`. -function has$1(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); + + +// Retrieve all the enumerable property names of an object. +function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; } -var isArguments = tagTester('Arguments'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/_methodFingerprint.js -// Define a fallback version of the method in browsers (ahem, IE < 9), where -// there isn't any inspectable "Arguments" type. -(function() { - if (!isArguments(arguments)) { - isArguments = function(obj) { - return has$1(obj, 'callee'); - }; - } -}()); -var isArguments$1 = isArguments; -// Is a given object a finite number? -function isFinite$1(obj) { - return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); -} -// Is the given value `NaN`? -function isNaN$1(obj) { - return isNumber(obj) && _isNaN(obj); -} - -// Predicate-generating function. Often useful outside of Underscore. -function constant(value) { - return function() { - return value; +// Since the regular `Object.prototype.toString` type tests don't work for +// some types in IE 11, we use a fingerprinting heuristic instead, based +// on the methods. It's not great, but it's the best we got. +// The fingerprint method lists are defined below. +function ie11fingerprint(methods) { + var length = _getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (_getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!modules_isFunction(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !modules_isFunction(obj[forEachName]); }; } -// Common internal logic for `isArrayLike` and `isBufferLike`. -function createSizePropertyCheck(getSizeProperty) { - return function(collection) { - var sizeProperty = getSizeProperty(collection); - return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; +// In the interest of compact minification, we write +// each string in the fingerprints only once. +var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + +// `Map`, `WeakMap` and `Set` each have slightly different +// combinations of the above sublists. +var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isMap.js + + + + +/* harmony default export */ const isMap = (isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakMap.js + + + + +/* harmony default export */ const isWeakMap = (isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isSet.js + + + + +/* harmony default export */ const isSet = (isIE11 ? ie11fingerprint(setMethods) : tagTester('Set')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/isWeakSet.js + + +/* harmony default export */ const isWeakSet = (tagTester('WeakSet')); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/values.js + + +// Retrieve the values of an object's properties. +function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; } + return values; } -// Internal helper to generate a function to obtain property `key` from `obj`. -function shallowProperty(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; +// CONCATENATED MODULE: ./node_modules/underscore/modules/pairs.js + + +// Convert an object into a list of `[key, value]` pairs. +// The opposite of `_.object` with one argument. +function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; } -// Internal helper to obtain the `byteLength` property of an object. -var getByteLength = shallowProperty('byteLength'); +// CONCATENATED MODULE: ./node_modules/underscore/modules/invert.js -// Internal helper to determine whether we should spend extensive checks against -// `ArrayBuffer` et al. -var isBufferLike = createSizePropertyCheck(getByteLength); -// Is a given value a typed array? -var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; -function isTypedArray(obj) { - // `ArrayBuffer.isView` is the most future-proof, so use it when available. - // Otherwise, fall back on the above regular expression. - return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : - isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); +// Invert the keys and values of an object. The values must be serializable. +function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; } -var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); +// CONCATENATED MODULE: ./node_modules/underscore/modules/functions.js -// Internal helper to obtain the `length` property of an object. -var getLength = shallowProperty('length'); -// Internal helper to create a simple lookup structure. -// `collectNonEnumProps` used to depend on `_.contains`, but this led to -// circular imports. `emulatedSet` is a one-off solution that only works for -// arrays of strings. -function emulatedSet(keys) { - var hash = {}; - for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; - return { - contains: function(key) { return hash[key] === true; }, - push: function(key) { - hash[key] = true; - return keys.push(key); +// Return a sorted list of the function names available on the object. +function functions(obj) { + var names = []; + for (var key in obj) { + if (modules_isFunction(obj[key])) names.push(key); + } + return names.sort(); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createAssigner.js +// An internal function for creating assigner functions. +function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } } + return obj; }; } -// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't -// be iterated by `for key in ...` and thus missed. Extends `keys` in place if -// needed. -function collectNonEnumProps(obj, keys) { - keys = emulatedSet(keys); - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto; +// CONCATENATED MODULE: ./node_modules/underscore/modules/extend.js - // Constructor is a special case. - var prop = 'constructor'; - if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { - keys.push(prop); - } - } -} -// Retrieve the names of an object's own properties. -// Delegates to **ECMAScript 5**'s native `Object.keys`. -function keys(obj) { - if (!isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (has$1(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} +// Extend a given object with all the properties in passed-in object(s). +/* harmony default export */ const extend = (createAssigner(allKeys)); -// Is a given array, string, or object empty? -// An "empty" object has no enumerable own-properties. -function isEmpty(obj) { - if (obj == null) return true; - // Skip the more expensive `toString`-based type checks if `obj` has no - // `.length`. - var length = getLength(obj); - if (typeof length == 'number' && ( - isArray(obj) || isString(obj) || isArguments$1(obj) - )) return length === 0; - return getLength(keys(obj)) === 0; -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/extendOwn.js -// Returns whether an object has a given set of `key:value` pairs. -function isMatch(object, attrs) { - var _keys = keys(attrs), length = _keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = _keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; -} -// If Underscore is called as a function, it returns a wrapped object that can -// be used OO-style. This wrapper holds altered versions of all functions added -// through `_.mixin`. Wrapped objects may be chained. -function _$1(obj) { - if (obj instanceof _$1) return obj; - if (!(this instanceof _$1)) return new _$1(obj); - this._wrapped = obj; + +// Assigns a given object with all the own properties in the passed-in +// object(s). +// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) +/* harmony default export */ const extendOwn = (createAssigner(keys)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defaults.js + + + +// Fill in a given object with default properties. +/* harmony default export */ const defaults = (createAssigner(allKeys, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseCreate.js + + + +// Create a naked function reference for surrogate-prototype-swapping. +function ctor() { + return function(){}; } -_$1.VERSION = VERSION; +// An internal function for creating a new object that inherits from another. +function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; +} -// Extracts the result from a wrapped and chained object. -_$1.prototype.value = function() { - return this._wrapped; -}; +// CONCATENATED MODULE: ./node_modules/underscore/modules/create.js -// Provide unwrapping proxies for some methods used in engine operations -// such as arithmetic and JSON stringification. -_$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; -_$1.prototype.toString = function() { - return String(this._wrapped); -}; -// Internal function to wrap or shallow-copy an ArrayBuffer, -// typed array or DataView to a new view, reusing the buffer. -function toBufferView(bufferSource) { - return new Uint8Array( - bufferSource.buffer || bufferSource, - bufferSource.byteOffset || 0, - getByteLength(bufferSource) - ); +// Creates an object that inherits from the given prototype object. +// If additional properties are provided then they will be added to the +// created object. +function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; } -// We use this string twice, so give it a name for minification. -var tagDataView = '[object DataView]'; +// CONCATENATED MODULE: ./node_modules/underscore/modules/clone.js -// Internal recursive comparison function for `_.isEqual`. -function eq(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) return false; - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) return b !== b; - // Exhaust primitive checks - var type = typeof a; - if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; - return deepEq(a, b, aStack, bStack); -} - -// Internal recursive comparison function for `_.isEqual`. -function deepEq(a, b, aStack, bStack) { - // Unwrap any wrapped objects. - if (a instanceof _$1) a = a._wrapped; - if (b instanceof _$1) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - // Work around a bug in IE 10 - Edge 13. - if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { - if (!isDataView$1(b)) return false; - className = tagDataView; - } - switch (className) { - // These types are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case '[object Symbol]': - return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); - case '[object ArrayBuffer]': - case tagDataView: - // Coerce to typed array so we can fall through. - return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); - } - - var areArrays = className === '[object Array]'; - if (!areArrays && isTypedArray$1(a)) { - var byteLength = getByteLength(a); - if (byteLength !== getByteLength(b)) return false; - if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; - areArrays = true; - } - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && - isFunction$1(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var _keys = keys(a), key; - length = _keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = _keys[length]; - if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} - -// Perform a deep comparison to check if two objects are equal. -function isEqual(a, b) { - return eq(a, b); -} - -// Retrieve all the enumerable property names of an object. -function allKeys(obj) { - if (!isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; -} - -// Since the regular `Object.prototype.toString` type tests don't work for -// some types in IE 11, we use a fingerprinting heuristic instead, based -// on the methods. It's not great, but it's the best we got. -// The fingerprint method lists are defined below. -function ie11fingerprint(methods) { - var length = getLength(methods); - return function(obj) { - if (obj == null) return false; - // `Map`, `WeakMap` and `Set` have no enumerable keys. - var keys = allKeys(obj); - if (getLength(keys)) return false; - for (var i = 0; i < length; i++) { - if (!isFunction$1(obj[methods[i]])) return false; - } - // If we are testing against `WeakMap`, we need to ensure that - // `obj` doesn't have a `forEach` method in order to distinguish - // it from a regular `Map`. - return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); - }; -} - -// In the interest of compact minification, we write -// each string in the fingerprints only once. -var forEachName = 'forEach', - hasName = 'has', - commonInit = ['clear', 'delete'], - mapTail = ['get', hasName, 'set']; - -// `Map`, `WeakMap` and `Set` each have slightly different -// combinations of the above sublists. -var mapMethods = commonInit.concat(forEachName, mapTail), - weakMapMethods = commonInit.concat(mapTail), - setMethods = ['add'].concat(commonInit, forEachName, hasName); - -var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); - -var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); - -var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); - -var isWeakSet = tagTester('WeakSet'); - -// Retrieve the values of an object's properties. -function values(obj) { - var _keys = keys(obj); - var length = _keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[_keys[i]]; - } - return values; -} - -// Convert an object into a list of `[key, value]` pairs. -// The opposite of `_.object` with one argument. -function pairs(obj) { - var _keys = keys(obj); - var length = _keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [_keys[i], obj[_keys[i]]]; - } - return pairs; -} - -// Invert the keys and values of an object. The values must be serializable. -function invert(obj) { - var result = {}; - var _keys = keys(obj); - for (var i = 0, length = _keys.length; i < length; i++) { - result[obj[_keys[i]]] = _keys[i]; - } - return result; -} - -// Return a sorted list of the function names available on the object. -function functions(obj) { - var names = []; - for (var key in obj) { - if (isFunction$1(obj[key])) names.push(key); - } - return names.sort(); -} - -// An internal function for creating assigner functions. -function createAssigner(keysFunc, defaults) { - return function(obj) { - var length = arguments.length; - if (defaults) obj = Object(obj); - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!defaults || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; -} - -// Extend a given object with all the properties in passed-in object(s). -var extend = createAssigner(allKeys); - -// Assigns a given object with all the own properties in the passed-in -// object(s). -// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -var extendOwn = createAssigner(keys); - -// Fill in a given object with default properties. -var defaults = createAssigner(allKeys, true); - -// Create a naked function reference for surrogate-prototype-swapping. -function ctor() { - return function(){}; -} - -// An internal function for creating a new object that inherits from another. -function baseCreate(prototype) { - if (!isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - var Ctor = ctor(); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; -} - -// Creates an object that inherits from the given prototype object. -// If additional properties are provided then they will be added to the -// created object. -function create(prototype, props) { - var result = baseCreate(prototype); - if (props) extendOwn(result, props); - return result; -} - -// Create a (shallow-cloned) duplicate of an object. -function clone(obj) { - if (!isObject(obj)) return obj; - return isArray(obj) ? obj.slice() : extend({}, obj); + + + +// Create a (shallow-cloned) duplicate of an object. +function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/tap.js // Invokes `interceptor` with the `obj` and then returns `obj`. // The primary purpose of this method is to "tap into" a method chain, in // order to perform operations on intermediate results within the chain. @@ -17143,19 +17208,28 @@ function tap(obj, interceptor) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toPath.js + + + // Normalize a (deep) property `path` to array. // Like `_.iteratee`, this function can be customized. -function toPath$1(path) { +function toPath(path) { return isArray(path) ? path : [path]; } -_$1.toPath = toPath$1; +_.toPath = toPath; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_toPath.js + + // Internal wrapper for `_.toPath` to enable minification. // Similar to `cb` for `_.iteratee`. -function toPath(path) { - return _$1.toPath(path); +function _toPath_toPath(path) { + return _.toPath(path); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_deepGet.js // Internal function to obtain a nested property in `obj` along `path`. function deepGet(obj, path) { var length = path.length; @@ -17166,34 +17240,48 @@ function deepGet(obj, path) { return length ? obj : void 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/get.js + + + + // Get the value of the (deep) property on `path` from `object`. // If any property in `path` does not exist or if the value is // `undefined`, return `defaultValue` instead. // The `path` is normalized through `_.toPath`. function get(object, path, defaultValue) { - var value = deepGet(object, toPath(path)); + var value = deepGet(object, _toPath_toPath(path)); return isUndefined(value) ? defaultValue : value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/has.js + + + // Shortcut function for checking if an object has a given property directly on // itself (in other words, not on a prototype). Unlike the internal `has` // function, this public version can also traverse nested properties. -function has(obj, path) { - path = toPath(path); +function has_has(obj, path) { + path = _toPath_toPath(path); var length = path.length; for (var i = 0; i < length; i++) { var key = path[i]; - if (!has$1(obj, key)) return false; + if (!has(obj, key)) return false; obj = obj[key]; } return !!length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/identity.js // Keep the identity function around for default iteratees. function identity(value) { return value; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/matcher.js + + + // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. function matcher(attrs) { @@ -17203,15 +17291,20 @@ function matcher(attrs) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/property.js + + + // Creates a function that, when passed an object, will traverse that object’s // properties down the given `path`, specified as an array of keys or indices. function property(path) { - path = toPath(path); + path = _toPath_toPath(path); return function(obj) { return deepGet(obj, path); }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_optimizeCb.js // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. @@ -17234,31 +17327,53 @@ function optimizeCb(func, context, argCount) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_baseIteratee.js + + + + + + + + // An internal function to generate callbacks that can be applied to each // element in a collection, returning the desired result — either `_.identity`, // an arbitrary callback, a property matcher, or a property accessor. function baseIteratee(value, context, argCount) { if (value == null) return identity; - if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (modules_isFunction(value)) return optimizeCb(value, context, argCount); if (isObject(value) && !isArray(value)) return matcher(value); return property(value); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/iteratee.js + + + // External wrapper for our callback generator. Users may customize // `_.iteratee` if they want additional predicate/iteratee shorthand styles. // This abstraction hides the internal-only `argCount` argument. function iteratee(value, context) { return baseIteratee(value, context, Infinity); } -_$1.iteratee = iteratee; +_.iteratee = iteratee; + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_cb.js + + + // The function we call internally to generate a callback. It invokes // `_.iteratee` if overridden, otherwise `baseIteratee`. function cb(value, context, argCount) { - if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + if (_.iteratee !== iteratee) return _.iteratee(value, context); return baseIteratee(value, context, argCount); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/mapObject.js + + + // Returns the results of applying the `iteratee` to each element of `obj`. // In contrast to `_.map` it returns an object. function mapObject(obj, iteratee, context) { @@ -17273,9 +17388,14 @@ function mapObject(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/noop.js // Predicate-generating function. Often useful outside of Underscore. function noop(){} +// CONCATENATED MODULE: ./node_modules/underscore/modules/propertyOf.js + + + // Generates a function for a given object that returns a given property. function propertyOf(obj) { if (obj == null) return noop; @@ -17284,6 +17404,9 @@ function propertyOf(obj) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/times.js + + // Run a function **n** times. function times(n, iteratee, context) { var accum = Array(Math.max(0, n)); @@ -17292,6 +17415,7 @@ function times(n, iteratee, context) { return accum; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/random.js // Return a random integer between `min` and `max` (inclusive). function random(min, max) { if (max == null) { @@ -17301,10 +17425,14 @@ function random(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/now.js // A (possibly faster) way to get the current timestamp as an integer. -var now = Date.now || function() { +/* harmony default export */ const now = (Date.now || function() { return new Date().getTime(); -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createEscaper.js + // Internal helper to generate functions for escaping and unescaping strings // to/from HTML interpolation. @@ -17322,32 +17450,53 @@ function createEscaper(map) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_escapeMap.js // Internal list of HTML entities for escaping. -var escapeMap = { +/* harmony default export */ const _escapeMap = ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '`': '`' -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/escape.js + + // Function for escaping strings to HTML interpolation. -var _escape = createEscaper(escapeMap); +/* harmony default export */ const modules_escape = (createEscaper(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_unescapeMap.js + + // Internal list of HTML entities for unescaping. -var unescapeMap = invert(escapeMap); +/* harmony default export */ const _unescapeMap = (invert(_escapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unescape.js + + // Function for unescaping strings from HTML interpolation. -var _unescape = createEscaper(unescapeMap); +/* harmony default export */ const modules_unescape = (createEscaper(_unescapeMap)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/templateSettings.js + // By default, Underscore uses ERB-style template delimiters. Change the // following template settings to use alternative delimiters. -var templateSettings = _$1.templateSettings = { +/* harmony default export */ const templateSettings = (_.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g -}; +}); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/template.js + + + // When customizing `_.templateSettings`, if you don't want to define an // interpolation, evaluation or escaping regex, we need one that is @@ -17384,7 +17533,7 @@ var bareIdentifier = /^\s*(\w|\$)+\s*$/; // NB: `oldSettings` only exists for backwards compatibility. function template(text, settings, oldSettings) { if (!settings && oldSettings) settings = oldSettings; - settings = defaults({}, settings, _$1.templateSettings); + settings = defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. var matcher = RegExp([ @@ -17438,7 +17587,7 @@ function template(text, settings, oldSettings) { } var template = function(data) { - return render.call(this, data, _$1); + return render.call(this, data, _); }; // Provide the compiled source as a convenience for precompilation. @@ -17447,14 +17596,18 @@ function template(text, settings, oldSettings) { return template; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/result.js + + + // Traverses the children of `obj` along `path`. If a child is a function, it // is invoked with its parent as context. Returns the value of the final // child, or `fallback` if any child is undefined. function result(obj, path, fallback) { - path = toPath(path); + path = _toPath_toPath(path); var length = path.length; if (!length) { - return isFunction$1(fallback) ? fallback.call(obj) : fallback; + return modules_isFunction(fallback) ? fallback.call(obj) : fallback; } for (var i = 0; i < length; i++) { var prop = obj == null ? void 0 : obj[path[i]]; @@ -17462,11 +17615,12 @@ function result(obj, path, fallback) { prop = fallback; i = length; // Ensure we don't continue iterating. } - obj = isFunction$1(prop) ? prop.call(obj) : prop; + obj = modules_isFunction(prop) ? prop.call(obj) : prop; } return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniqueId.js // Generate a unique integer id (unique within the entire client session). // Useful for temporary DOM ids. var idCounter = 0; @@ -17475,13 +17629,20 @@ function uniqueId(prefix) { return prefix ? prefix + id : id; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/chain.js + + // Start chaining a wrapped Underscore object. function chain(obj) { - var instance = _$1(obj); + var instance = _(obj); instance._chain = true; return instance; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_executeBound.js + + + // Internal function to execute `sourceFunc` bound to `context` with optional // `args`. Determines whether to execute a function as a constructor or as a // normal function. @@ -17493,6 +17654,11 @@ function executeBound(sourceFunc, boundFunc, context, callingContext, args) { return self; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/partial.js + + + + // Partially apply a function by creating a version that has had some of its // arguments pre-filled, without changing its dynamic `this` context. `_` acts // as a placeholder by default, allowing any combination of arguments to be @@ -17511,26 +17677,42 @@ var partial = restArguments(function(func, boundArgs) { return bound; }); -partial.placeholder = _$1; +partial.placeholder = _; +/* harmony default export */ const modules_partial = (partial); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/bind.js + + + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). -var bind = restArguments(function(func, context, args) { - if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); +/* harmony default export */ const bind = (restArguments(function(func, context, args) { + if (!modules_isFunction(func)) throw new TypeError('Bind must be called on a function'); var bound = restArguments(function(callArgs) { return executeBound(func, bound, context, this, args.concat(callArgs)); }); return bound; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_isArrayLike.js + + // Internal helper for collection methods to determine whether a collection // should be iterated as an array or as an object. // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 -var isArrayLike = createSizePropertyCheck(getLength); +/* harmony default export */ const _isArrayLike = (createSizePropertyCheck(_getLength)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_flatten.js + + + + // Internal implementation of a recursive `flatten` function. -function flatten$1(input, depth, strict, output) { +function flatten(input, depth, strict, output) { output = output || []; if (!depth && depth !== 0) { depth = Infinity; @@ -17538,12 +17720,12 @@ function flatten$1(input, depth, strict, output) { return output.concat(input); } var idx = output.length; - for (var i = 0, length = getLength(input); i < length; i++) { + for (var i = 0, length = _getLength(input); i < length; i++) { var value = input[i]; - if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + if (_isArrayLike(value) && (isArray(value) || modules_isArguments(value))) { // Flatten current level of array or arguments object. if (depth > 1) { - flatten$1(value, depth - 1, strict, output); + flatten(value, depth - 1, strict, output); idx = output.length; } else { var j = 0, len = value.length; @@ -17556,11 +17738,16 @@ function flatten$1(input, depth, strict, output) { return output; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/bindAll.js + + + + // Bind a number of an object's methods to that object. Remaining arguments // are the method names to be bound. Useful for ensuring that all callbacks // defined on an object belong to it. -var bindAll = restArguments(function(obj, keys) { - keys = flatten$1(keys, false, false); +/* harmony default export */ const bindAll = (restArguments(function(obj, keys) { + keys = flatten(keys, false, false); var index = keys.length; if (index < 1) throw new Error('bindAll must be passed function names'); while (index--) { @@ -17568,31 +17755,45 @@ var bindAll = restArguments(function(obj, keys) { obj[key] = bind(obj[key], obj); } return obj; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/memoize.js + // Memoize an expensive function by storing its results. function memoize(func, hasher) { var memoize = function(key) { var cache = memoize.cache; var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); return cache[address]; }; memoize.cache = {}; return memoize; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/delay.js + + // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. -var delay = restArguments(function(func, wait, args) { +/* harmony default export */ const delay = (restArguments(function(func, wait, args) { return setTimeout(function() { return func.apply(null, args); }, wait); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/defer.js + + + // Defers a function, scheduling it to run after the current call stack has // cleared. -var defer = partial(delay, _$1, 1); +/* harmony default export */ const defer = (modules_partial(delay, _, 1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/throttle.js + // Returns a function, that, when invoked, will only be triggered at most once // during a given window of time. Normally, the throttled function will run @@ -17640,6 +17841,10 @@ function throttle(func, wait, options) { return throttled; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/debounce.js + + + // When a sequence of calls of the returned function ends, the argument // function is triggered. The end of a sequence is defined by the `wait` // parameter. If `immediate` is passed, the argument function will be @@ -17678,13 +17883,17 @@ function debounce(func, wait, immediate) { return debounced; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/wrap.js + + // Returns the first function passed as an argument to the second, // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. function wrap(func, wrapper) { - return partial(wrapper, func); + return modules_partial(wrapper, func); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/negate.js // Returns a negated version of the passed-in predicate. function negate(predicate) { return function() { @@ -17692,6 +17901,7 @@ function negate(predicate) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/compose.js // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. function compose() { @@ -17705,6 +17915,7 @@ function compose() { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/after.js // Returns a function that will only be executed on and after the Nth call. function after(times, func) { return function() { @@ -17714,6 +17925,7 @@ function after(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/before.js // Returns a function that will only be executed up to (but not including) the // Nth call. function before(times, func) { @@ -17727,9 +17939,17 @@ function before(times, func) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/once.js + + + // Returns a function that will be executed at most one time, no matter how // often you call it. Useful for lazy initialization. -var once = partial(before, 2); +/* harmony default export */ const once = (modules_partial(before, 2)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findKey.js + + // Returns the first key on an object that passes a truth test. function findKey(obj, predicate, context) { @@ -17741,11 +17961,15 @@ function findKey(obj, predicate, context) { } } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createPredicateIndexFinder.js + + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = getLength(array); + var length = _getLength(array); var index = dir > 0 ? 0 : length - 1; for (; index >= 0 && index < length; index += dir) { if (predicate(array[index], index, array)) return index; @@ -17754,18 +17978,28 @@ function createPredicateIndexFinder(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findIndex.js + + // Returns the first index on an array-like that passes a truth test. -var findIndex = createPredicateIndexFinder(1); +/* harmony default export */ const findIndex = (createPredicateIndexFinder(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/findLastIndex.js + // Returns the last index on an array-like that passes a truth test. -var findLastIndex = createPredicateIndexFinder(-1); +/* harmony default export */ const findLastIndex = (createPredicateIndexFinder(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortedIndex.js + + // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. function sortedIndex(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = getLength(array); + var low = 0, high = _getLength(array); while (low < high) { var mid = Math.floor((low + high) / 2); if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; @@ -17773,10 +18007,15 @@ function sortedIndex(array, obj, iteratee, context) { return low; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createIndexFinder.js + + + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. function createIndexFinder(dir, predicateFind, sortedIndex) { return function(array, item, idx) { - var i = 0, length = getLength(array); + var i = 0, length = _getLength(array); if (typeof idx == 'number') { if (dir > 0) { i = idx >= 0 ? idx : Math.max(idx + length, i); @@ -17788,7 +18027,7 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { return array[idx] === item ? idx : -1; } if (item !== item) { - idx = predicateFind(slice.call(array, i, length), isNaN$1); + idx = predicateFind(slice.call(array, i, length), isNaN_isNaN); return idx >= 0 ? idx + i : -1; } for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { @@ -17798,29 +18037,52 @@ function createIndexFinder(dir, predicateFind, sortedIndex) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexOf.js + + + + // Return the position of the first occurrence of an item in an array, // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. -var indexOf = createIndexFinder(1, findIndex, sortedIndex); +/* harmony default export */ const indexOf = (createIndexFinder(1, findIndex, sortedIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/lastIndexOf.js + + // Return the position of the last occurrence of an item in an array, // or -1 if the item is not included in the array. -var lastIndexOf = createIndexFinder(-1, findLastIndex); +/* harmony default export */ const lastIndexOf = (createIndexFinder(-1, findLastIndex)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/find.js + + + // Return the first value which passes a truth test. function find(obj, predicate, context) { - var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var keyFinder = _isArrayLike(obj) ? findIndex : findKey; var key = keyFinder(obj, predicate, context); if (key !== void 0 && key !== -1) return obj[key]; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/findWhere.js + + + // Convenience version of a common use case of `_.find`: getting the first // object containing specific `key:value` pairs. function findWhere(obj, attrs) { return find(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/each.js + + + + // The cornerstone for collection functions, an `each` // implementation, aka `forEach`. // Handles raw objects in addition to array-likes. Treats all @@ -17828,7 +18090,7 @@ function findWhere(obj, attrs) { function each(obj, iteratee, context) { iteratee = optimizeCb(iteratee, context); var i, length; - if (isArrayLike(obj)) { + if (_isArrayLike(obj)) { for (i = 0, length = obj.length; i < length; i++) { iteratee(obj[i], i, obj); } @@ -17841,10 +18103,15 @@ function each(obj, iteratee, context) { return obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/map.js + + + + // Return the results of applying the iteratee to each element. function map(obj, iteratee, context) { iteratee = cb(iteratee, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, results = Array(length); for (var index = 0; index < length; index++) { @@ -17854,12 +18121,17 @@ function map(obj, iteratee, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_createReduce.js + + + + // Internal helper to create a reducing function, iterating left or right. function createReduce(dir) { // Wrap code that reassigns argument variables in a separate function than // the one that accesses `arguments.length` to avoid a perf hit. (#1991) var reducer = function(obj, iteratee, memo, initial) { - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length, index = dir > 0 ? 0 : length - 1; if (!initial) { @@ -17879,12 +18151,22 @@ function createReduce(dir) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduce.js + + // **Reduce** builds up a single result from a list of values, aka `inject`, // or `foldl`. -var reduce = createReduce(1); +/* harmony default export */ const reduce = (createReduce(1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/reduceRight.js + // The right-associative version of reduce, also known as `foldr`. -var reduceRight = createReduce(-1); +/* harmony default export */ const reduceRight = (createReduce(-1)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/filter.js + + // Return all the elements that pass a truth test. function filter(obj, predicate, context) { @@ -17896,15 +18178,25 @@ function filter(obj, predicate, context) { return results; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/reject.js + + + + // Return all the elements for which a truth test fails. function reject(obj, predicate, context) { return filter(obj, negate(cb(predicate)), context); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/every.js + + + + // Determine whether all of the elements pass a truth test. function every(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17913,10 +18205,15 @@ function every(obj, predicate, context) { return true; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/some.js + + + + // Determine if at least one element in the object passes a truth test. function some(obj, predicate, context) { predicate = cb(predicate, context); - var _keys = !isArrayLike(obj) && keys(obj), + var _keys = !_isArrayLike(obj) && keys(obj), length = (_keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = _keys ? _keys[index] : index; @@ -17925,20 +18222,32 @@ function some(obj, predicate, context) { return false; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/contains.js + + + + // Determine if the array or object contains a given item (using `===`). function contains(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); if (typeof fromIndex != 'number' || guard) fromIndex = 0; return indexOf(obj, item, fromIndex) >= 0; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/invoke.js + + + + + + // Invoke a method (with arguments) on every item in a collection. -var invoke = restArguments(function(obj, path, args) { +/* harmony default export */ const invoke = (restArguments(function(obj, path, args) { var contextPath, func; - if (isFunction$1(path)) { + if (modules_isFunction(path)) { func = path; } else { - path = toPath(path); + path = _toPath_toPath(path); contextPath = path.slice(0, -1); path = path[path.length - 1]; } @@ -17953,25 +18262,39 @@ var invoke = restArguments(function(obj, path, args) { } return method == null ? method : method.apply(context, args); }); -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/pluck.js + + // Convenience version of a common use case of `_.map`: fetching a property. function pluck(obj, key) { return map(obj, property(key)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/where.js + + + // Convenience version of a common use case of `_.filter`: selecting only // objects containing specific `key:value` pairs. function where(obj, attrs) { return filter(obj, matcher(attrs)); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/max.js + + + + + // Return the maximum element (or element-based computation). function max(obj, iteratee, context) { var result = -Infinity, lastComputed = -Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value > result) { @@ -17991,12 +18314,18 @@ function max(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/min.js + + + + + // Return the minimum element (or element-based computation). function min(obj, iteratee, context) { var result = Infinity, lastComputed = Infinity, value, computed; if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) { - obj = isArrayLike(obj) ? obj : values(obj); + obj = _isArrayLike(obj) ? obj : values(obj); for (var i = 0, length = obj.length; i < length; i++) { value = obj[i]; if (value != null && value < result) { @@ -18016,6 +18345,15 @@ function min(obj, iteratee, context) { return result; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/toArray.js + + + + + + + + // Safely create a real, live array from anything iterable. var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; function toArray(obj) { @@ -18025,21 +18363,28 @@ function toArray(obj) { // Keep surrogate pair characters together. return obj.match(reStrSymbol); } - if (isArrayLike(obj)) return map(obj, identity); + if (_isArrayLike(obj)) return map(obj, identity); return values(obj); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sample.js + + + + + + // Sample **n** random values from a collection using the modern version of the // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // If **n** is not specified, returns a single random element. // The internal `guard` argument allows it to work with `_.map`. function sample(obj, n, guard) { if (n == null || guard) { - if (!isArrayLike(obj)) obj = values(obj); + if (!_isArrayLike(obj)) obj = values(obj); return obj[random(obj.length - 1)]; } var sample = toArray(obj); - var length = getLength(sample); + var length = _getLength(sample); n = Math.max(Math.min(n, length), 0); var last = length - 1; for (var index = 0; index < n; index++) { @@ -18051,11 +18396,19 @@ function sample(obj, n, guard) { return sample.slice(0, n); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/shuffle.js + + // Shuffle a collection. function shuffle(obj) { return sample(obj, Infinity); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/sortBy.js + + + + // Sort the object's values by a criterion produced by an iteratee. function sortBy(obj, iteratee, context) { var index = 0; @@ -18077,6 +18430,10 @@ function sortBy(obj, iteratee, context) { }), 'value'); } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_group.js + + + // An internal function used for aggregate "group by" operations. function group(behavior, partition) { return function(obj, iteratee, context) { @@ -18090,53 +18447,80 @@ function group(behavior, partition) { }; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/groupBy.js + + + // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. -var groupBy = group(function(result, value, key) { - if (has$1(result, key)) result[key].push(value); else result[key] = [value]; -}); +/* harmony default export */ const groupBy = (group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/indexBy.js + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for // when you know that your index values will be unique. -var indexBy = group(function(result, value, key) { +/* harmony default export */ const indexBy = (group(function(result, value, key) { result[key] = value; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/countBy.js + + // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. -var countBy = group(function(result, value, key) { - if (has$1(result, key)) result[key]++; else result[key] = 1; -}); +/* harmony default export */ const countBy = (group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/partition.js + // Split a collection into two arrays: one whose elements all pass the given // truth test, and one whose elements all do not pass the truth test. -var partition = group(function(result, value, pass) { +/* harmony default export */ const partition = (group(function(result, value, pass) { result[pass ? 0 : 1].push(value); -}, true); +}, true)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/size.js + + // Return the number of elements in a collection. function size(obj) { if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : keys(obj).length; + return _isArrayLike(obj) ? obj.length : keys(obj).length; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/_keyInObj.js // Internal `_.pick` helper function to determine whether `key` is an enumerable // property name of `obj`. function keyInObj(value, key, obj) { return key in obj; } +// CONCATENATED MODULE: ./node_modules/underscore/modules/pick.js + + + + + + + // Return a copy of the object only containing the allowed properties. -var pick = restArguments(function(obj, keys) { +/* harmony default export */ const pick = (restArguments(function(obj, keys) { var result = {}, iteratee = keys[0]; if (obj == null) return result; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); keys = allKeys(obj); } else { iteratee = keyInObj; - keys = flatten$1(keys, false, false); + keys = flatten(keys, false, false); obj = Object(obj); } for (var i = 0, length = keys.length; i < length; i++) { @@ -18145,545 +18529,987 @@ var pick = restArguments(function(obj, keys) { if (iteratee(value, key, obj)) result[key] = value; } return result; -}); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/omit.js + + + + + + + // Return a copy of the object without the disallowed properties. -var omit = restArguments(function(obj, keys) { +/* harmony default export */ const omit = (restArguments(function(obj, keys) { var iteratee = keys[0], context; - if (isFunction$1(iteratee)) { + if (modules_isFunction(iteratee)) { iteratee = negate(iteratee); if (keys.length > 1) context = keys[1]; } else { - keys = map(flatten$1(keys, false, false), String); + keys = map(flatten(keys, false, false), String); iteratee = function(value, key) { return !contains(keys, key); }; } return pick(obj, iteratee, context); -}); +})); -// Returns everything but the last entry of the array. Especially useful on +// CONCATENATED MODULE: ./node_modules/underscore/modules/initial.js + + +// Returns everything but the last entry of the array. Especially useful on // the arguments object. Passing **n** will return all the values in // the array, excluding the last N. function initial(array, n, guard) { return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); } -// Get the first element of an array. Passing **n** will return the first N -// values in the array. The **guard** check allows it to work with `_.map`. -function first(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[0]; - return initial(array, array.length - n); -} +// CONCATENATED MODULE: ./node_modules/underscore/modules/first.js + + +// Get the first element of an array. Passing **n** will return the first N +// values in the array. The **guard** check allows it to work with `_.map`. +function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/rest.js + + +// Returns everything but the first entry of the `array`. Especially useful on +// the `arguments` object. Passing an **n** will return the rest N values in the +// `array`. +function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/last.js + + +// Get the last element of an array. Passing **n** will return the last N +// values in the array. +function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/compact.js + + +// Trim out all falsy values from an array. +function compact(array) { + return filter(array, Boolean); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/flatten.js + + +// Flatten out an array, either recursively (by default), or up to `depth`. +// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. +function flatten_flatten(array, depth) { + return flatten(array, depth, false); +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/difference.js + + + + + +// Take the difference between one array and a number of other arrays. +// Only the elements present in just the first array will remain. +/* harmony default export */ const difference = (restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/without.js + + + +// Return a version of the array that does not contain the specified value(s). +/* harmony default export */ const without = (restArguments(function(array, otherArrays) { + return difference(array, otherArrays); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/uniq.js + + + + + +// Produce a duplicate-free version of the array. If the array has already +// been sorted, you have the option of using a faster algorithm. +// The faster algorithm will not work with an iteratee if the iteratee +// is not a one-to-one function, so providing an iteratee will disable +// the faster algorithm. +function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = _getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/union.js + + + + +// Produce an array that contains the union: each distinct element from all of +// the passed-in arrays. +/* harmony default export */ const union = (restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); +})); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/intersection.js + + + +// Produce an array that contains every item shared between all the +// passed-in arrays. +function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = _getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/unzip.js + + + + +// Complement of zip. Unzip accepts an array of arrays and groups +// each array's elements on shared indices. +function unzip(array) { + var length = (array && max(array, _getLength).length) || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/zip.js + + + +// Zip together multiple lists into a single array -- elements that share +// an index go together. +/* harmony default export */ const zip = (restArguments(unzip)); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/object.js + + +// Converts lists into objects. Pass either a single array of `[key, value]` +// pairs, or two parallel arrays of the same length -- one of keys, and one of +// the corresponding values. Passing by pairs is the reverse of `_.pairs`. +function object(list, values) { + var result = {}; + for (var i = 0, length = _getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/range.js +// Generate an integer Array containing an arithmetic progression. A port of +// the native Python `range()` function. See +// [the Python documentation](https://docs.python.org/library/functions.html#range). +function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/chunk.js + + +// Chunk a single array into multiple arrays, each containing `count` or fewer +// items. +function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/_chainResult.js + + +// Helper function to continue chaining intermediate results. +function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/mixin.js + + + + + + +// Add your own custom functions to the Underscore object. +function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; +} + +// CONCATENATED MODULE: ./node_modules/underscore/modules/underscore-array-methods.js + + + + + +// Add all mutator `Array` functions to the wrapper. +each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; +}); + +// Add all accessor `Array` functions to the wrapper. +each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; +}); + +/* harmony default export */ const underscore_array_methods = (_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index.js +// Named Exports +// ============= + +// Underscore.js 1.13.6 +// https://underscorejs.org +// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +// Baseline setup. + + + +// Object Functions +// ---------------- +// Our most fundamental functions operate on any JavaScript object. +// Most functions in Underscore depend on at least one function in this section. + +// A group of functions that check the types of core JavaScript values. +// These are often informally referred to as the "isType" functions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +// Functions that treat an object as a dictionary of key-value pairs. + + + + + + + + + + + + + + + + +// Utility Functions +// ----------------- +// A bit of a grab bag: Predicate-generating functions for use with filters and +// loops, string escaping and templating, create random numbers and unique ids, +// and functions that facilitate Underscore's chaining and iteration conventions. + + + + + + + + + + + + + + + + + + + +// Function (ahem) Functions +// ------------------------- +// These functions take a function as an argument and return a new function +// as the result. Also known as higher-order functions. + + + + + + + + + + + + + + + +// Finders +// ------- +// Functions that extract (the position of) a single element from an object +// or array based on some criterion. + + + + + + + + + +// Collection Functions +// -------------------- +// Functions that work on any collection of elements: either an array, or +// an object of key-value pairs. + + + + + + + + + + + + + + + + + + + + + + + + +// `_.pick` and `_.omit` are actually object functions, but we put +// them here in order to create a more natural reading order in the +// monolithic build as they depend on `_.contains`. + + + +// Array Functions +// --------------- +// Functions that operate on arrays (and array-likes) only, because they’re +// expressed in terms of operations on an ordered list of values. + + + + + + + + + + + + + + + + + +// OOP +// --- +// These modules support the "object-oriented" calling style. See also +// `underscore.js` and `index-default.js`. + + + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-default.js +// Default Export +// ============== +// In this module, we mix our bundled exports into the `_` object and export +// the result. This is analogous to setting `module.exports = _` in CommonJS. +// Hence, this module is also the entry point of our UMD bundle and the package +// entry point for CommonJS and AMD users. In other words, this is (the source +// of) the module you are interfacing with when you do any of the following: +// +// ```js +// // CommonJS +// var _ = require('underscore'); +// +// // AMD +// define(['underscore'], function(_) {...}); +// +// // UMD in the browser +// // _ is available as a global variable +// ``` + + + +// Add all of the Underscore functions to the wrapper object. +var index_default_ = mixin(modules_namespaceObject); +// Legacy Node.js API. +index_default_._ = index_default_; +// Export the Underscore API. +/* harmony default export */ const index_default = (index_default_); + +// CONCATENATED MODULE: ./node_modules/underscore/modules/index-all.js +// ESM Exports +// =========== +// This module is the package entry point for ES module users. In other words, +// it is the module they are interfacing with when they import from the whole +// package instead of from a submodule, like this: +// +// ```js +// import { map } from 'underscore'; +// ``` +// +// The difference with `./index-default`, which is the package entry point for +// CommonJS, AMD and UMD users, is purely technical. In ES modules, named and +// default exports are considered to be siblings, so when you have a default +// export, its properties are not automatically available as named exports. For +// this reason, we re-export the named exports in addition to providing the same +// default export as in `./index-default`. + + + + +/***/ }), + +/***/ 5030: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ value: true })); + +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + + if (typeof process === "object" && "version" in process) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + + return ""; +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 9521: +/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { + +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXPORTS +__nccwpck_require__.d(__webpack_exports__, { + "NIL": () => /* reexport */ nil, + "parse": () => /* reexport */ esm_node_parse, + "stringify": () => /* reexport */ esm_node_stringify, + "v1": () => /* reexport */ esm_node_v1, + "v3": () => /* reexport */ esm_node_v3, + "v4": () => /* reexport */ esm_node_v4, + "v5": () => /* reexport */ esm_node_v5, + "validate": () => /* reexport */ esm_node_validate, + "version": () => /* reexport */ esm_node_version +}); + +// CONCATENATED MODULE: external "crypto" +const external_crypto_namespaceObject = require("crypto");; +var external_crypto_default = /*#__PURE__*/__nccwpck_require__.n(external_crypto_namespaceObject); + +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/rng.js + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + external_crypto_default().randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!esm_node_validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = (stringify); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v1.js + + // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || esm_node_stringify(b); +} + +/* harmony default export */ const esm_node_v1 = (v1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +/* harmony default export */ function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return esm_node_stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + -// Returns everything but the first entry of the `array`. Especially useful on -// the `arguments` object. Passing an **n** will return the rest N values in the -// `array`. -function rest(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; } +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/md5.js -// Get the last element of an array. Passing **n** will return the last N -// values in the array. -function last(array, n, guard) { - if (array == null || array.length < 1) return n == null || guard ? void 0 : []; - if (n == null || guard) return array[array.length - 1]; - return rest(array, Math.max(0, array.length - n)); -} -// Trim out all falsy values from an array. -function compact(array) { - return filter(array, Boolean); -} +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } -// Flatten out an array, either recursively (by default), or up to `depth`. -// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. -function flatten(array, depth) { - return flatten$1(array, depth, false); + return external_crypto_default().createHash('md5').update(bytes).digest(); } -// Take the difference between one array and a number of other arrays. -// Only the elements present in just the first array will remain. -var difference = restArguments(function(array, rest) { - rest = flatten$1(rest, true, true); - return filter(array, function(value){ - return !contains(rest, value); - }); -}); +/* harmony default export */ const esm_node_md5 = (md5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v3.js -// Return a version of the array that does not contain the specified value(s). -var without = restArguments(function(array, otherArrays) { - return difference(array, otherArrays); -}); -// Produce a duplicate-free version of the array. If the array has already -// been sorted, you have the option of using a faster algorithm. -// The faster algorithm will not work with an iteratee if the iteratee -// is not a one-to-one function, so providing an iteratee will disable -// the faster algorithm. -function uniq(array, isSorted, iteratee, context) { - if (!isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted && !iteratee) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!contains(result, value)) { - result.push(value); - } - } - return result; -} +const v3 = v35('v3', 0x30, esm_node_md5); +/* harmony default export */ const esm_node_v3 = (v3); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v4.js -// Produce an array that contains the union: each distinct element from all of -// the passed-in arrays. -var union = restArguments(function(arrays) { - return uniq(flatten$1(arrays, true, true)); -}); -// Produce an array that contains every item shared between all the -// passed-in arrays. -function intersection(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (contains(result, item)) continue; - var j; - for (j = 1; j < argsLength; j++) { - if (!contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; -} -// Complement of zip. Unzip accepts an array of arrays and groups -// each array's elements on shared indices. -function unzip(array) { - var length = (array && max(array, getLength).length) || 0; - var result = Array(length); +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - for (var index = 0; index < length; index++) { - result[index] = pluck(array, index); - } - return result; -} + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided -// Zip together multiple lists into a single array -- elements that share -// an index go together. -var zip = restArguments(unzip); + if (buf) { + offset = offset || 0; -// Converts lists into objects. Pass either a single array of `[key, value]` -// pairs, or two parallel arrays of the same length -- one of keys, and one of -// the corresponding values. Passing by pairs is the reverse of `_.pairs`. -function object(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } + + return buf; } - return result; + + return esm_node_stringify(rnds); } -// Generate an integer Array containing an arithmetic progression. A port of -// the native Python `range()` function. See -// [the Python documentation](https://docs.python.org/library/functions.html#range). -function range(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - if (!step) { - step = stop < start ? -1 : 1; - } +/* harmony default export */ const esm_node_v4 = (v4); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); } - return range; + return external_crypto_default().createHash('sha1').update(bytes).digest(); } -// Chunk a single array into multiple arrays, each containing `count` or fewer -// items. -function chunk(array, count) { - if (count == null || count < 1) return []; - var result = []; - var i = 0, length = array.length; - while (i < length) { - result.push(slice.call(array, i, i += count)); +/* harmony default export */ const esm_node_sha1 = (sha1); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/nil.js +/* harmony default export */ const nil = ('00000000-0000-0000-0000-000000000000'); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/version.js + + +function version(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); } - return result; -} -// Helper function to continue chaining intermediate results. -function chainResult(instance, obj) { - return instance._chain ? _$1(obj).chain() : obj; + return parseInt(uuid.substr(14, 1), 16); } -// Add your own custom functions to the Underscore object. -function mixin(obj) { - each(functions(obj), function(name) { - var func = _$1[name] = obj[name]; - _$1.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return chainResult(this, func.apply(_$1, args)); - }; - }); - return _$1; -} +/* harmony default export */ const esm_node_version = (version); +// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/index.js + + -// Add all mutator `Array` functions to the wrapper. -each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) { - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) { - delete obj[0]; - } - } - return chainResult(this, obj); - }; -}); -// Add all accessor `Array` functions to the wrapper. -each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _$1.prototype[name] = function() { - var obj = this._wrapped; - if (obj != null) obj = method.apply(obj, arguments); - return chainResult(this, obj); - }; -}); -// Named Exports -var allExports = { - __proto__: null, - VERSION: VERSION, - restArguments: restArguments, - isObject: isObject, - isNull: isNull, - isUndefined: isUndefined, - isBoolean: isBoolean, - isElement: isElement, - isString: isString, - isNumber: isNumber, - isDate: isDate, - isRegExp: isRegExp, - isError: isError, - isSymbol: isSymbol, - isArrayBuffer: isArrayBuffer, - isDataView: isDataView$1, - isArray: isArray, - isFunction: isFunction$1, - isArguments: isArguments$1, - isFinite: isFinite$1, - isNaN: isNaN$1, - isTypedArray: isTypedArray$1, - isEmpty: isEmpty, - isMatch: isMatch, - isEqual: isEqual, - isMap: isMap, - isWeakMap: isWeakMap, - isSet: isSet, - isWeakSet: isWeakSet, - keys: keys, - allKeys: allKeys, - values: values, - pairs: pairs, - invert: invert, - functions: functions, - methods: functions, - extend: extend, - extendOwn: extendOwn, - assign: extendOwn, - defaults: defaults, - create: create, - clone: clone, - tap: tap, - get: get, - has: has, - mapObject: mapObject, - identity: identity, - constant: constant, - noop: noop, - toPath: toPath$1, - property: property, - propertyOf: propertyOf, - matcher: matcher, - matches: matcher, - times: times, - random: random, - now: now, - escape: _escape, - unescape: _unescape, - templateSettings: templateSettings, - template: template, - result: result, - uniqueId: uniqueId, - chain: chain, - iteratee: iteratee, - partial: partial, - bind: bind, - bindAll: bindAll, - memoize: memoize, - delay: delay, - defer: defer, - throttle: throttle, - debounce: debounce, - wrap: wrap, - negate: negate, - compose: compose, - after: after, - before: before, - once: once, - findKey: findKey, - findIndex: findIndex, - findLastIndex: findLastIndex, - sortedIndex: sortedIndex, - indexOf: indexOf, - lastIndexOf: lastIndexOf, - find: find, - detect: find, - findWhere: findWhere, - each: each, - forEach: each, - map: map, - collect: map, - reduce: reduce, - foldl: reduce, - inject: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - filter: filter, - select: filter, - reject: reject, - every: every, - all: every, - some: some, - any: some, - contains: contains, - includes: contains, - include: contains, - invoke: invoke, - pluck: pluck, - where: where, - max: max, - min: min, - shuffle: shuffle, - sample: sample, - sortBy: sortBy, - groupBy: groupBy, - indexBy: indexBy, - countBy: countBy, - partition: partition, - toArray: toArray, - size: size, - pick: pick, - omit: omit, - first: first, - head: first, - take: first, - initial: initial, - last: last, - rest: rest, - tail: rest, - drop: rest, - compact: compact, - flatten: flatten, - without: without, - uniq: uniq, - unique: uniq, - union: union, - intersection: intersection, - difference: difference, - unzip: unzip, - transpose: unzip, - zip: zip, - object: object, - range: range, - chunk: chunk, - mixin: mixin, - 'default': _$1 -}; -// Default Export -// Add all of the Underscore functions to the wrapper object. -var _ = mixin(allExports); -// Legacy Node.js API. -_._ = _; - -exports.VERSION = VERSION; -exports._ = _; -exports._escape = _escape; -exports._unescape = _unescape; -exports.after = after; -exports.allKeys = allKeys; -exports.before = before; -exports.bind = bind; -exports.bindAll = bindAll; -exports.chain = chain; -exports.chunk = chunk; -exports.clone = clone; -exports.compact = compact; -exports.compose = compose; -exports.constant = constant; -exports.contains = contains; -exports.countBy = countBy; -exports.create = create; -exports.debounce = debounce; -exports.defaults = defaults; -exports.defer = defer; -exports.delay = delay; -exports.difference = difference; -exports.each = each; -exports.every = every; -exports.extend = extend; -exports.extendOwn = extendOwn; -exports.filter = filter; -exports.find = find; -exports.findIndex = findIndex; -exports.findKey = findKey; -exports.findLastIndex = findLastIndex; -exports.findWhere = findWhere; -exports.first = first; -exports.flatten = flatten; -exports.functions = functions; -exports.get = get; -exports.groupBy = groupBy; -exports.has = has; -exports.identity = identity; -exports.indexBy = indexBy; -exports.indexOf = indexOf; -exports.initial = initial; -exports.intersection = intersection; -exports.invert = invert; -exports.invoke = invoke; -exports.isArguments = isArguments$1; -exports.isArray = isArray; -exports.isArrayBuffer = isArrayBuffer; -exports.isBoolean = isBoolean; -exports.isDataView = isDataView$1; -exports.isDate = isDate; -exports.isElement = isElement; -exports.isEmpty = isEmpty; -exports.isEqual = isEqual; -exports.isError = isError; -exports.isFinite = isFinite$1; -exports.isFunction = isFunction$1; -exports.isMap = isMap; -exports.isMatch = isMatch; -exports.isNaN = isNaN$1; -exports.isNull = isNull; -exports.isNumber = isNumber; -exports.isObject = isObject; -exports.isRegExp = isRegExp; -exports.isSet = isSet; -exports.isString = isString; -exports.isSymbol = isSymbol; -exports.isTypedArray = isTypedArray$1; -exports.isUndefined = isUndefined; -exports.isWeakMap = isWeakMap; -exports.isWeakSet = isWeakSet; -exports.iteratee = iteratee; -exports.keys = keys; -exports.last = last; -exports.lastIndexOf = lastIndexOf; -exports.map = map; -exports.mapObject = mapObject; -exports.matcher = matcher; -exports.max = max; -exports.memoize = memoize; -exports.min = min; -exports.mixin = mixin; -exports.negate = negate; -exports.noop = noop; -exports.now = now; -exports.object = object; -exports.omit = omit; -exports.once = once; -exports.pairs = pairs; -exports.partial = partial; -exports.partition = partition; -exports.pick = pick; -exports.pluck = pluck; -exports.property = property; -exports.propertyOf = propertyOf; -exports.random = random; -exports.range = range; -exports.reduce = reduce; -exports.reduceRight = reduceRight; -exports.reject = reject; -exports.rest = rest; -exports.restArguments = restArguments; -exports.result = result; -exports.sample = sample; -exports.shuffle = shuffle; -exports.size = size; -exports.some = some; -exports.sortBy = sortBy; -exports.sortedIndex = sortedIndex; -exports.tap = tap; -exports.template = template; -exports.templateSettings = templateSettings; -exports.throttle = throttle; -exports.times = times; -exports.toArray = toArray; -exports.toPath = toPath$1; -exports.union = union; -exports.uniq = uniq; -exports.uniqueId = uniqueId; -exports.unzip = unzip; -exports.values = values; -exports.where = where; -exports.without = without; -exports.wrap = wrap; -exports.zip = zip; -//# sourceMappingURL=underscore-node-f.cjs.map /***/ }), -/***/ 3571: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ 2940: +/***/ ((module) => { -// Underscore.js 1.13.4 -// https://underscorejs.org -// (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) -var underscoreNodeF = __nccwpck_require__(1641); + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + return wrapper -module.exports = underscoreNodeF._; -//# sourceMappingURL=underscore-node.cjs.map + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} /***/ }), diff --git a/.github/libs/GitUtils.js b/.github/libs/GitUtils.js index 979121bfbed7..ba9d7fa2b38a 100644 --- a/.github/libs/GitUtils.js +++ b/.github/libs/GitUtils.js @@ -79,7 +79,7 @@ function getCommitHistoryAsJSON(fromTag, toTag) { * Parse merged PRs, excluding those from irrelevant branches. * * @param {Array>} commits - * @returns {Array} + * @returns {Array} */ function getValidMergedPRs(commits) { const mergedPRs = new Set(); @@ -94,7 +94,7 @@ function getValidMergedPRs(commits) { return; } - const pr = match[1]; + const pr = Number.parseInt(match[1], 10); if (mergedPRs.has(pr)) { // If a PR shows up in the log twice, that means that the PR was deployed in the previous checklist. // That also means that we don't want to include it in the current checklist, so we remove it now. @@ -113,7 +113,7 @@ function getValidMergedPRs(commits) { * * @param {String} fromTag * @param {String} toTag - * @returns {Promise>} – Pull request numbers + * @returns {Promise>} – Pull request numbers */ function getPullRequestsMergedBetween(fromTag, toTag) { return getCommitHistoryAsJSON(fromTag, toTag).then((commitList) => { diff --git a/.github/libs/GithubUtils.js b/.github/libs/GithubUtils.js index ea81dc6e1136..1381d694f000 100644 --- a/.github/libs/GithubUtils.js +++ b/.github/libs/GithubUtils.js @@ -432,7 +432,7 @@ class GithubUtils { /** * Generate the well-formatted body of a production release. * - * @param {Array} pullRequests + * @param {Array} pullRequests * @returns {String} */ static getReleaseBody(pullRequests) { diff --git a/.github/workflows/README.md b/.github/workflows/README.md index aa38a7778f31..e1b1696411b1 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -104,6 +104,11 @@ The GitHub workflows require a large list of secrets to deploy, notify and test 1. `APPLE_DEMO_PASSWORD` - Demo account password used for https://appstoreconnect.apple.com/ 1. `BROWSERSTACK` - Used to access Browserstack's API +### Important note about Secrets +Secrets are available by default in most workflows. The exception to the rule is callable workflows. If a workflow is triggered by the `workflow_call` event, it will only have access to repo secrets if the workflow that called it passed in the secrets explicitly (for example, using `secrets: inherit`). + +Furthermore, secrets are not accessible in actions. If you need to access a secret in an action, you must declare it as an input and pass it in. GitHub _should_ still obfuscate the value of the secret in workflow run logs. + ## Actions All these _workflows_ are comprised of atomic _actions_. Most of the time, we can use pre-made and independently maintained actions to create powerful workflows that meet our needs. However, when we want to do something very specific or have a more complex or robust action in mind, we can create our own _actions_. diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml index d4c17a734b1c..494326869cca 100644 --- a/.github/workflows/cherryPick.yml +++ b/.github/workflows/cherryPick.yml @@ -77,6 +77,7 @@ jobs: id: cherryPick run: | echo "Attempting to cherry-pick ${{ steps.getCPMergeCommit.outputs.MERGE_COMMIT_SHA }}" + git config user.name ${{ github.actor }} if git cherry-pick -S -x --mainline 1 ${{ steps.getCPMergeCommit.outputs.MERGE_COMMIT_SHA }}; then echo "🎉 No conflicts! CP was a success, PR can be automerged 🎉" echo "HAS_CONFLICTS=false" >> "$GITHUB_OUTPUT" @@ -87,6 +88,7 @@ jobs: GIT_MERGE_AUTOEDIT=no git cherry-pick --continue echo "HAS_CONFLICTS=true" >> "$GITHUB_OUTPUT" fi + git config user.name OSBotify - name: Push changes run: | diff --git a/.github/workflows/deployExpensifyHelp.yml b/.github/workflows/deployExpensifyHelp.yml index cb4e0f956657..ca7345ef9462 100644 --- a/.github/workflows/deployExpensifyHelp.yml +++ b/.github/workflows/deployExpensifyHelp.yml @@ -28,23 +28,27 @@ jobs: steps: - name: Checkout uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - name: Setup NodeJS uses: Expensify/App/.github/actions/composite/setupNode@main + - name: Setup Pages uses: actions/configure-pages@f156874f8191504dae5b037505266ed5dda6c382 + - name: Create docs routes file run: ./.github/scripts/createDocsRoutes.sh + - name: Build with Jekyll uses: actions/jekyll-build-pages@0143c158f4fa0c5dcd99499a5d00859d79f70b0e with: source: ./docs/ destination: ./docs/_site + - name: Upload artifact uses: actions/upload-pages-artifact@64bcae551a7b18bcb9a09042ddf1960979799187 with: path: ./docs/_site - # Deployment job deploy: environment: diff --git a/.github/workflows/e2ePerformanceTests.yml b/.github/workflows/e2ePerformanceTests.yml index fe364b376e3b..d8f9cad138d9 100644 --- a/.github/workflows/e2ePerformanceTests.yml +++ b/.github/workflows/e2ePerformanceTests.yml @@ -46,6 +46,9 @@ jobs: git fetch origin tag ${{ steps.getMostRecentRelease.outputs.VERSION }} --no-tags --depth=1 git switch --detach ${{ steps.getMostRecentRelease.outputs.VERSION }} + - name: Configure MapBox SDK + run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }} + - name: Build APK if: ${{ !fromJSON(steps.checkForExistingArtifact.outputs.exists) }} uses: Expensify/App/.github/actions/composite/buildAndroidAPK@main @@ -112,6 +115,9 @@ jobs: - name: Checkout "delta ref" run: git checkout ${{ steps.getDeltaRef.outputs.DELTA_REF }} + - name: Configure MapBox SDK + run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }} + - name: Build APK uses: Expensify/App/.github/actions/composite/buildAndroidAPK@main with: diff --git a/.github/workflows/platformDeploy.yml b/.github/workflows/platformDeploy.yml index e787b26336c5..84f8373ff247 100644 --- a/.github/workflows/platformDeploy.yml +++ b/.github/workflows/platformDeploy.yml @@ -36,6 +36,9 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Configure MapBox SDK + run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }} + - uses: Expensify/App/.github/actions/composite/setupNode@main - uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7 @@ -77,7 +80,7 @@ jobs: - name: Upload Android version to Browser Stack if: ${{ !fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }} - run: curl -u "$BROWSERSTACK" -X POST "https://api-cloud.browserstack.com/app-live/upload" -F "file=@./android/app/build/outputs/bundle/release/app-release.aab" + run: curl -u "$BROWSERSTACK" -X POST "https://api-cloud.browserstack.com/app-live/upload" -F "file=@./android/app/build/outputs/bundle/productionRelease/app-production-release.aab" env: BROWSERSTACK: ${{ secrets.BROWSERSTACK }} @@ -144,6 +147,9 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Configure MapBox SDK + run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }} + - uses: Expensify/App/.github/actions/composite/setupNode@main - uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fe234bc8373c..e79a02281ae0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,7 +42,9 @@ jobs: name: Storybook tests steps: - uses: actions/checkout@v3 + - uses: Expensify/App/.github/actions/composite/setupNode@main + - name: Storybook run run: npm run storybook -- --smoke-test --ci diff --git a/.github/workflows/testBuild.yml b/.github/workflows/testBuild.yml index adff13b2dba6..16fffcc2c65e 100644 --- a/.github/workflows/testBuild.yml +++ b/.github/workflows/testBuild.yml @@ -103,6 +103,9 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + - name: Configure MapBox SDK + run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }} + - name: Run Fastlane beta test id: runFastlaneBetaTest run: bundle exec fastlane android build_internal @@ -111,6 +114,8 @@ jobs: S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} S3_BUCKET: ad-hoc-expensify-cash S3_REGION: us-east-1 + MYAPP_UPLOAD_STORE_PASSWORD: ${{ secrets.MYAPP_UPLOAD_STORE_PASSWORD }} + MYAPP_UPLOAD_KEY_PASSWORD: ${{ secrets.MYAPP_UPLOAD_KEY_PASSWORD }} - uses: actions/upload-artifact@v3 with: @@ -130,6 +135,9 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha || needs.getBranchRef.outputs.REF }} + - name: Configure MapBox SDK + run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }} + - name: Create .env.adhoc file based on staging and add PULL_REQUEST_NUMBER env to it run: | cp .env.staging .env.adhoc diff --git a/.github/workflows/verifyPodfile.yml b/.github/workflows/verifyPodfile.yml index 8b715a7047c4..64188769f0bd 100644 --- a/.github/workflows/verifyPodfile.yml +++ b/.github/workflows/verifyPodfile.yml @@ -15,5 +15,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v3 + - uses: Expensify/App/.github/actions/composite/setupNode@main + - run: ./.github/scripts/verifyPodfile.sh diff --git a/.storybook/preview.js b/.storybook/preview.js index 7ccfd74e0e45..b198c0d2d626 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -7,15 +7,23 @@ import ComposeProviders from '../src/components/ComposeProviders'; import HTMLEngineProvider from '../src/components/HTMLEngineProvider'; import OnyxProvider from '../src/components/OnyxProvider'; import {LocaleContextProvider} from '../src/components/withLocalize'; +import {KeyboardStateProvider} from '../src/components/withKeyboardState'; +import {EnvironmentProvider} from '../src/components/withEnvironment'; +import {WindowDimensionsProvider} from '../src/components/withWindowDimensions'; import ONYXKEYS from '../src/ONYXKEYS'; Onyx.init({ keys: ONYXKEYS, + initialKeyStates: { + [ONYXKEYS.NETWORK]: {isOffline: false}, + }, }); const decorators = [ (Story) => ( - + ), diff --git a/README.md b/README.md index b453a278b29f..fce7cee8dcdd 100644 --- a/README.md +++ b/README.md @@ -45,18 +45,19 @@ In order to have more consistent builds, we use a strict `node` and `npm` versio * Changes applied to Javascript will be applied automatically via WebPack as configured in `webpack.dev.js` ## Running the iOS app 📱 -For an M1 Mac, read this [SO](https://stackoverflow.com/c/expensify/questions/11580) for installing cocoapods. +For an M1 Mac, read this [SO](https://stackoverflow.com/questions/64901180/how-to-run-cocoapods-on-apple-silicon-m1) for installing cocoapods. * Install project gems, including cocoapods, using bundler to ensure everyone uses the same versions. In the project root, run: `bundle install` * If you get the error `Could not find 'bundler'`, install the bundler gem first: `gem install bundler` and try again. * If you are using MacOS and get the error `Gem::FilePermissionError` when trying to install the bundler gem, you're likely using system Ruby, which requires administrator permission to modify. To get around this, install another version of Ruby with a version manager like [rbenv](https://github.com/rbenv/rbenv#installation). +* Before installing iOS dependencies, you need to obtain a token from Mapbox to download their SDKs. Please run `npm run configure-mapbox` and follow the instructions. * To install the iOS dependencies, run: `npm install && npm run pod-install` * If you are an Expensify employee and want to point the emulator to your local VM, follow [this](https://stackoverflow.com/c/expensify/questions/7699) * To run a on a **Development Simulator**: `npm run ios` * Changes applied to Javascript will be applied automatically, any changes to native code will require a recompile ## Running the Android app 🤖 -* To install the Android dependencies, run: `npm install` +* Before installing Android dependencies, you need to obtain a token from Mapbox to download their SDKs. Please run `npm run configure-mapbox` and follow the instructions. If you already did this step for iOS, there is no need to repeat this step. * Go through the instructions on [this SO post](https://stackoverflow.com/c/expensify/questions/13283/13284#13284) to start running the app on android. * For more information, go through the official React-Native instructions on [this page](https://reactnative.dev/docs/environment-setup#development-os) for "React Native CLI Quickstart" > Mac OS > Android * If you are an Expensify employee and want to point the emulator to your local VM, follow [this](https://stackoverflow.com/c/expensify/questions/7699) diff --git a/__mocks__/react-native.js b/__mocks__/react-native.js index 26a943ce62bc..006d1aee38af 100644 --- a/__mocks__/react-native.js +++ b/__mocks__/react-native.js @@ -1,7 +1,6 @@ // eslint-disable-next-line no-restricted-imports import * as ReactNative from 'react-native'; import _ from 'underscore'; -import CONST from '../src/CONST'; jest.doMock('react-native', () => { let url = 'https://new.expensify.com/'; @@ -15,7 +14,12 @@ jest.doMock('react-native', () => { // runs against index.native.js source and so anything that is testing a component reliant on withWindowDimensions() // would be most commonly assumed to be on a mobile phone vs. a tablet or desktop style view. This behavior can be // overridden by explicitly setting the dimensions inside a test via Dimensions.set() - let dimensions = CONST.TESTING.SCREEN_SIZE.SMALL; + let dimensions = { + width: 300, + height: 700, + scale: 1, + fontScale: 1, + }; return Object.setPrototypeOf( { diff --git a/android/app/build.gradle b/android/app/build.gradle index 2e85857a297a..11ce415ad0ae 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -22,7 +22,7 @@ react { // The list of variants to that are debuggable. For those we're going to // skip the bundling of the JS bundle and the assets. By default is just 'debug'. // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] + debuggableVariants = ["developmentDebug"] /* Bundling */ // A list containing the node command and its flags. Default is just 'node'. @@ -90,8 +90,8 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion multiDexEnabled rootProject.ext.multiDexEnabled - versionCode 1001035301 - versionName "1.3.53-1" + versionCode 1001036300 + versionName "1.3.63-0" } flavorDimensions "default" @@ -136,7 +136,7 @@ android { signingConfig signingConfigs.debug } release { - signingConfig signingConfigs.debug + signingConfig signingConfigs.release productFlavors.production.signingConfig signingConfigs.release minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" diff --git a/android/app/src/adhoc/res/drawable/ic_launcher_foreground.xml b/android/app/src/adhoc/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 000000000000..691ad3b6350c --- /dev/null +++ b/android/app/src/adhoc/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + diff --git a/android/app/src/adhoc/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/adhoc/res/mipmap-anydpi-v26/ic_launcher.xml index 80b730f3673e..7353dbd1fd82 100644 --- a/android/app/src/adhoc/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/app/src/adhoc/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/android/app/src/adhoc/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/adhoc/res/mipmap-anydpi-v26/ic_launcher_round.xml index 80b730f3673e..7353dbd1fd82 100644 --- a/android/app/src/adhoc/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/android/app/src/adhoc/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/android/app/src/adhoc/res/mipmap-hdpi/ic_launcher.png b/android/app/src/adhoc/res/mipmap-hdpi/ic_launcher.png index d76e72f68d43ed97a57948ad589c8655a2ee336f..56e3594de9204dcdc1ef3296ac6d1ee53648a350 100644 GIT binary patch literal 4471 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 JPDHLkV1jPo#GU{E literal 3991 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 diff --git a/android/app/src/adhoc/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/adhoc/res/mipmap-hdpi/ic_launcher_round.png index f8d43cb7dc2d69d713ed1bab69c3fbebc95bbc90..56e3594de9204dcdc1ef3296ac6d1ee53648a350 100644 GIT binary patch literal 4471 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 JPDHLkV1jPo#GU{E literal 5861 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 delta 2294 zcmVPx-yGcYrRA@u(S$k|8#Toz2uFt-+@8b9o zA0=&y+onk%O`}923WTOW!pp>J0t#)_@(*e(wWUwgQkoC~F(4X9gcJuAP}-^}Q7Azq zLdHBQfv6n^L7J+5L7Eb~B~N1~cKo>8ovCJKcW-9z_HHjmf`3R|>2$ky^Z0(>_xpYG z%`Cx1evymZe*7Q6ryaqd2p9nP=d%(a3Vpo@Xl6SHHj6PO6Jn`4w+aG@&fUQP77l7!z*7eOJ^@*RSnFQ_* zsG9Cg!VM;H?SJ-K`;G97V*ul``iu{95+A{X4zzT{02T+sjdH6&@0GcAC8-Ig1oK2^~6w=0W#tsdj&H<3i z^PZX9svz!vJO(;6CV4)Z0^+6eQyBw`av!N+14QnPe*qD20jNXg7c!R>1v@eb``J!l zcmmAkZlhq70R{o%N!c_&8s>uBGzYAN{}7a|d|A&CeCP2sSV* z!Pb<+xTYTL@;Z=Y94ubu(S`l@9N340U~l~!v{&Q^(cZj&1z2S?I2ua24Go}Hi+}?| z^*rbP@pG`Zya^1A1JM$Y#>+ugd=-o*VwD;>vVRIY{1NE>ZeYR&*?dF6_U?FA*ev7% z(B+lkD@IeWfBiDpL>gq)bdaW{0Qb1E5dMtgZ zO9K18SAbI^Ft@J(i|I8DpMg_|c5(m!N)6!Zdadp!vnqk>z7m-C?RC$Cjiq7!;SQk0 z$l5#=4M5wmTGh%v403y9Z!+^ zM%69ytncj-{}~R2{M*^k6q+U?AYCjL815;`K%YAV_QnS=ZeIX!5j%TZFO3Qc^-Jz1 z6EGjkA>yp6R=SDyo(A3gx&UZyX>cmpjC1&1(Ezfl(U*HcpFa$ih>FFCuLtVpoVIWg z%Y_VyD9AnEa4c|3X$W!R3xAcF$T%9IzwZQl^IyQSdKgVhrUoFjk1GN>(JeYK!5l5h|P`p#I0cE zrBeeC@8SUXd5@z36%5}8+}kQVXso{;WOl7b2jTrbXS3pxM~MLc>C#jcu3B&-<_+)@ z5(1>sVD0_rOCLqYs!8-WROK|jC=JBB9ysCWzdEYD_a9)beK0rO2wa-b4!-or>4##A zj@Dtv(IV)SZiA_qJ82 z7?0?7`8+jVX5re6dte#b38Lsz6oB9e=w78e-x2#)Pm1C>Iy?=rFOdx3{;0y?;iW4|zIpH#N>6+iExBn%I@{DImmqulxXy zuI>aS*$qNRfPVwXFka=pQ@pq}jC)R`o1aaivgRjocgM%7h}T{3xKMKzHZ(BY!l2G6g_E4fxJ^RIjRJ&$q6G z1rZiNb@cFtlhkxMs^|Y~1O1xJpS{8w>u+aT45@|91zQLCo4{oI@Ata#mqZ#7!8s=qn;^-Jz5Y)Dp8y-+6y z_A>{^-fydT_xP5R>-X#jFqZEf8RrdO>-qU!!ujUUpXTdUo|?`(o*xB}d3hILn0VF7 zw;ue2!@2*&y;{V8Jj5IXe=o+rwU8I`Y@z>)uwzP11DX6;G4O)XUGxC{2VCTKd~2&` Q{r~^~07*qoM6N<$f`2AxQvd(} diff --git a/android/app/src/adhoc/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/adhoc/res/mipmap-mdpi/ic_launcher_round.png index 3f0d4a9f6b77d42d107c8ea64c4cfd6ee86a0658..5bceb63203acb4bcaa84264d5bc7ac78cdf77bce 100644 GIT binary patch delta 2841 zcmV+!3+D8>8=n@CBYz6!Nkl zz+e=`2|)?UBt}FY5gt}FX|2ODRdK2@8WYFX*_deJKqP{S!eh`VPHEIcSEklK$x_+f z`ouB!55tSzj~vrLq6F2Kh2O zmhbR>&0BST3wA!YC3ELJ$3f5Z&aRORlJ(e{9q|h}ZI$Z01f?=>4SpV1DspR-ioDzS z_jerhOz-GB(IbStP1ZC& zSD)p|IVp~++<%K6q$^#uhzAWst=SloMKbl6;H%M8@nH%~zv?-?(H%;3;zY*ny2n4g zXShDtjdkahkPbWD57$frhM*4F?aHv@(70wAsDD)EuF_{+%$nf>B~DIIN(}?n zuOqO|t$d?v0I)%wd0%P^cIVEpkT1*O{>?($83ekw25C$P$g3uRa?&)DzCbItVjM{0LeY=_U5+&QMbCbu zvnr2b4dmjiOfxs%P0hi6<*r^H0jrT;jxO_jpnp)>1(gr(%4eDfrZ>_0a59UJm7;oJ z>~sKWZj`kTpS(QMecy2;^LaBzYcu=3JGX=jFa;H#d5t{H*w|1|KAdh<+E|>x%(XWK zUF9|FcLa??an@<1COF#e*qZB<=Omk4hi4n|Pu4fcAfGt|vyUl*G$G`j$sl9uRgTRR z?|+B`xl%d0(ymMgnd~@y_O%(oG)I|&8}L#WP|Vpv18!ha zbgxE%##rQFEJ;y4_3T6$O#hBn0pn0Plz*OR=Iog^%W@70i&ekFO^OZerl!dN5wPA$ z3CCv|S*d}bF%~%pdD&QzAgEt>cTmo#v7vD~k@+#xV}ZD98$_YA4R*TAJEL^}zpd4x1K;)968BxpA`M%^dZUE=5u7GmN zxlXr~K2ZT1*jbPX4fH+xJ`AAUm)APJ;I;{34H(R%Qhtwl`76Cs z1qE=tA)ufR|0mcO!1}faHlULQQgWDeyba{PMH~9H)znIh66bA}Kf>QIV1HXu0M_5% z>YYdcr87-{IUn1>&Hx{vBF-}22BcHhPlY1A*9p$=~!7y6|%g147rcP^H`}J&pJN)N4YrblCW4kQh%1t7O_AEywD!ctVvb_ z8gZoj^hS_iI zt!-X5SIqvh(SLJ^qxDcv&9JDYa&$&1S8Bei^akZ-f?Z7bK(D>a;n?VM3(>kz5?OUG z=DTwQzvt}VR@|6cngTwieuK674&>wn8{!PSK~;riciLB*uY_sb$L zLfHB@e^k=@#Sk~P*4M?B)`SsH$*U*)g=YW?9!gY~%&_eB~|pYS-6r^SwLpdBH8XbMPCuz5g4infC=;S#SgHeDEz?p7+Ir3#r#? zi-(m%&wq^cg~Z9;b-Wv;rWi&`^sKTqVKcwVpeqft5p?~5F`;KC0vQzC7NnuLfxS8i zqjri=r z`J`(P&WxynwIQ3f5f{#>L6^JKL_E+^J*R9>+<&L81l`#i?u5ZCZ%M>mH3V2lpvQ{% zLW{1QU}4x>=tk!)zOLa+#0Bm)r@|{?W8bX@kV7lZ#i!r;fId^IRT z>4s39?)l4Ooe+J+k9;J9WRcAMDEpO=Sbx&RbvD{ zLac?p=QF6)_+oWDLGS20>LY&9{9f6aTu3rV7MIzeJpZVTW=1G^67f4kJ2oUJ!hf+~ z_#9Go?5e3p-7)F=m1OQ;X^r7<{`ZWc(!lU!!LdTIMun(;pq zWDMQe6A^zz5c^H@9xT|u9~%%jn1i0_9epSIP+uA&PF0q|>~S_8ADAh2px=r((N>54 r|KS%Z=$YR6@ji5tqA^Y2=l=u3yb?}ONLKjJ00000NkvXXu0mjfd~SEM delta 3512 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 mCVD?(r!!arF5l5Ev1w$ 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 diff --git a/android/app/src/adhoc/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/adhoc/res/mipmap-xxhdpi/ic_launcher_round.png index c343ab0f94a592ab79eb7a4cba5e4b989d8afb5e..fe443ce3f696aa03003e96075489b08a95e10df0 100644 GIT binary patch literal 10152 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 a0lZ4xZvCT%UisP92#}Fb5U&t54E!HVi#I?3 literal 14056 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 A761SM diff --git a/android/app/src/adhoc/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/adhoc/res/mipmap-xxxhdpi/ic_launcher_round.png index d6df660bc3c393a9aa982373b71e3fcf7a1adea2..5760971304423d90468cfe24e1bb8164699ed4cf 100644 GIT binary patch literal 14589 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 a0lZ4xZvCT%UisP92#}Fb5U&t54E!HVi#I?3 literal 20273 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 IM6N<$f|gt1m;e9( diff --git a/android/app/src/adhoc/res/values/ic_launcher_background.xml b/android/app/src/adhoc/res/values/ic_launcher_background.xml index ad6f6d9631c0..f86b6cf6e2a0 100644 --- a/android/app/src/adhoc/res/values/ic_launcher_background.xml +++ b/android/app/src/adhoc/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - #3DDC84 - + #03D47C + \ No newline at end of file diff --git a/android/app/src/development/res/drawable/ic_launcher_foreground.xml b/android/app/src/development/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 000000000000..662b5dfc5eb0 --- /dev/null +++ b/android/app/src/development/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + diff --git a/android/app/src/development/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/development/res/mipmap-anydpi-v26/ic_launcher.xml index 80b730f3673e..7353dbd1fd82 100644 --- a/android/app/src/development/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/app/src/development/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/android/app/src/development/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/development/res/mipmap-anydpi-v26/ic_launcher_round.xml index 80b730f3673e..7353dbd1fd82 100644 --- a/android/app/src/development/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/android/app/src/development/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/android/app/src/development/res/mipmap-hdpi/ic_launcher.png b/android/app/src/development/res/mipmap-hdpi/ic_launcher.png index c1ec7afcfc02ea541ae331eec1b8bfddc409d0a9..8807b5a298f43fe1a905b3a8c4c8225917e4bcef 100644 GIT binary patch literal 4470 zcmV-+5sB`JP)@OjgqVYz7AnacMZ_BF_y0Eqm3=N&kzOrwuvfc9-{ucT7+L}UanNG+Yicq0q-fp`ND=lYlnSQ zy7pn8*mvDHIHvK2{H6-?5A`PRIKM6glz0l1`9>h6qOeveFZhL_q7YH5;#UK->%16ivZelVvm%8o}6S-8D8=365rD;p8^@^o%&ck`%3_kQ#mkvhPVFr?&@~{~kNi%mLN_NdMi|Ge zbk(3tRm6wt!d3Y|B^CGCcWIUB;kK&j)vi?0@&zZ{VDF<)k?XbPEPa~M0 z(ugYj$me|SP`&KUS5(L6c)K7R&A5&nqkvX8lS|3=rBqJ8mC8}UR0{4#rD4AI5#&du z$RO4p`@#N9V;E6SQjOz{oT+*pn!c#)E9Lofm?LHa=p3XK$_uDcl19n>F;tooz?C#A z-WXs%Q-)D;*G$$w8^<_yy$tm-p302Z>(X>Z?a=YIE6f%-<$%*`DY-9(%F~8ZDWI=e zNq1-niO?_hkK-t>ujS(!Wzl41)(%7-%ZbqIbmc`gNuP4&b85Vj10XwBP&w{q@5D?P zOy&3xDrbaIa{F{jHq4;puL=AWKI3(H{w=JYsjWbiFO_3PvvG~Gm`FO8U*jxJ57g_{ z_@eD0-Y@Ea&Q84x?#VfuN6FnYsWfhoSqVh2AC;p=P`NOYD{~@?S(@9G3$MSC%jz-G zU6E9tF@p7D>Kid(2qjN1G54cEBk4@;$I^kMYXuz}Rn*4NIbX^>IpmYsR9-ucN`V$u zGu)3UM*a?~(XmX=KEo4m3LVd4{m3z+Sii=xYE)6pkCYdt zc_pU|$Vm(}3Cn;!;^72)%X32j{gFrKvHt7E0{=xe%`w+C!F3s}lN?UZ*6V7&Xu;mO zygo3sF0oGC?Q_s_kR0RPgk@Y#nM_GBt}+(wngY--DP2S5BJfvpMpGGAwNp9fdPblw zxY(S|xg_mQ>?i1KtEiQg^94ISS`YXfxgf%9H6!|glZ|HIo7((Vpy_lh<9P|Enr(u# z&EQ+P<9XoeKBi*(8{@J(eh?*3EHu?^6~NA$`~xYoAu3(J;!SkyT^+91-E+|# z^VndLd?H&lOqTQ5eD|wTO9D2KIPIjH`%^h0h?0G)&2=>0j%FN@Y&mSz%$#qo z9aXm>w6Y*rn%Vxu;B(ltGS+P+FzeRIhw`#5g}xr@hI+o4OC39xkJocxT~rf;72*kx z*7KJ*(h%gH z%(0Qx%5^jYBJL65;9&ujxSQu1%5wPbTHmgbz<#hl(-=CC;#4Y48Y;E}xlw+huC}6` z%KloqZ+1_C3!!M%^LoxQHSuL82M69fM_kh3J$WeJ`%>P*1c48wWaBJx;Di&y8FL)XoTyGO^U4J#E9XvQk#n7(uzV^<(oI5H!W%&|M^b6_C|i&- z!@N3a4dj&+o{Q4P!N?!?uOxdm}S134VxM5K-R9+0H6k z5rnJ4NPl4S;P3T)h*ysP{wlM@$rOUdM&X`a!lX z6bA_zz?0|}0$HLJ2~v)%VY__&c&2bj%N3QRo&qj>>Uq(eQD~nwU}EpH$`%eX=wvrvs{8CyGs@pJX1U;I7 zxu2@K%7#JY#pA>Q@*>PDfhTw&h;8V+KwcMR?$-`5Et5Q1lpkX=eVzIpb+xp1YJW39 z56An%Jk*k7rez)<MbpiKc!D>AY(Oq-Btfv^$pw*OU!adrM+;obvM)*5Q-_%e zdN8*CAC@2h$}9BciJ;8z05d`N#P}-Z`PFJ=^A!6%6Qpf&^?jKM;#2Ho=0z!S@*o{S z>ME8#uDfzB&%KkLKSmq?ce4#ijCmsnGm{v`c!0dVk@+SoAGBzkSVtr1we&Bggup(W zApJ7mS!z$t=DAnFPk9Bk2xiM9c`H}P5V&l zAaxQ6;v}_$o%9J-*aSRLK;~wF3 z2*{6m7@`2xL9h8-8td!NxDXO%SU6)Hm7|$2vPM?Z?7(eeRE$pwj6t6}cp<1Ez<%s5 z5cnucXb(L6Ib8X3vrD?3P(Si`T;WBI(G3U#Uu^8(b(HaCD z&oVvSWNnQxBqr@)>XQ3ss<5q{OxJfys$RPt^j(^D-T9Cw&PkJlDAo30{`EyYd^wrU{pS+5h)mQ1tUG>YmrrWd2j)TtKRo%T5&R~0`aB3_&73R*0aCeFi5s@UA+olv| z6T_#xfX4i5DSda@Xp{1G@zvZQx<7X^?NNr)Otl_dV3H>+M4hEo!4}Ths)Y7w1AlK& z_O0H>1axzN3g@|uCsMa8Xx5!DBB(fpo?jVaQo5n|CVn{GylDpg)7kvXs_((4sW+%P z+brA{wU?$29;=jPS9^L^-%@yTLxia8yb<(bZal3{f$Q@|vd`67v-!2G7+Sq1npQ0x zN56xqRh=5i>!@u%n-^3&27H)Ol2$EE=s%I^>ecrc%aTxJv>SOSu83{z^}o;ZhT=3z z)Cfj*(3+Cn^vB&> z=%r`=On-Rn4qBZS1=n`b?-F?XZ{q@JReazt`S*e4Z-~AJb(CU5t~RP~r^xE#4`1c^ zRfo6(c3Dm}0WhcKSlx0CfuWo|l|MN(*0qVDhto_`r79_m{&Zv?Sjl)=Q@V!{^7DVs z(MvlXqTk<}LaVdq0C6wS?;psfKknI5PflFm<*#D{=*9)Xhe5Z#s*Y~Cj8yKAK` z?E*+i$_GqfH~vTi*|W-gkQ_H_u%pGaCw||cL>pjOX{vjImW-t}FF#8!ZGV7S)DK(l zq8D#p#)*4%A7DSd=vu@HiVeIB)j z{8mf92H4)S4WT}$)dR?r7mj6Tci8m9RRkYEB5Am4Vs-#uaay9|hwr<=CiLrA13`&X z=+BjJFzcxSqSzFxe3Slk@(?4eYIPX>VauIt3RXch|7~30FV#R!Mf9MHbNXB}gXzR| zYl1S(uLJz;=}eut3^rAKYwm$00@H~-XtX+YZ$#)2e#Uvl1a^#1&I*UN@R|&p!g*u( zDKY4$IC`jPMc`Aalc&+@+rnwp{L%a~kixEkb)nO)S}+>O39TdN-RXmBvxjz11YLUh zjb=JEa%!2249nm(@Y=_j8?+z zoK_k+>jQdZpbkTC?1;b9XfkrNLZqQLV#mJDJ)&ofhh<(VDi>RCc@!RPB z_N>YRZNQJMpEQtOupq(;nnOmPQxP?=I+I(D@8F&tFd=Vo2C-=hkw*2v|9o(h5;<%- z*`M?w^B0&dz^K?rjuFMF?AJi}$i;ZT(krF}(5qn@uDmxL1?sjZ3+sJ#HIRatod z4`=tjZWhWsphtU@z1hgo3Xwv3;$7%1wRMhEo>^S1oXX}YOE%>SOks%t^~ZLY@F#l` zDS04{J#)wBR+z$Nz6f9OGh8QsOQ2*gIP+ICSip-RhyT%Zx_sLL`q*7jbpP7Pv@|o6 zp(G>p*OIJ>mk(!6r2A6F(ao{LORsi1N1?181~ZwPogA&mQm`-nnz#pGh+{+a-AZxF zcWec+OH`8r$AU3&Y?J|HaTG<~3$o#ld3&g`Ho4F7R)C}%+De_<;-N=>M~Gjz^2GcD z;K12o0ZtTK>AX+9#-o;v!Nw}YqbpR|I`^PsWFPziuRoIwWo!j<^u-|!V1DUFz+mU% zF-w*0i;uCDj{7IoM`>hTiDj|2{9jXGpPI$sSTLq@;i%;(1Cxcz)WGJNkB;=qQ-BPT98T5ILCq3CrH$vn?&TrYY?Xm`T98 z_&fQsY$W9q<>^JQV4v7Gj={#lF>!2^;df9J76jhZ1ud!<08eZUb@aM+oO995D;#&t z*raTozem}*;uLu?={-`M`Y8mnUn|Elsuws_DhOml#Z%#ryF+2636`8JVUB4}1ir^>_#G#s)g12s0PY;`BN(RhX8-^I07*qo IM6N<$g1ZBtt^fc4 literal 4021 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 bdFlTEaQm;&F4&ve00000NkvXXu0mjfWdx`b diff --git a/android/app/src/development/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/development/res/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index eb5af7cb730f482bc5fda9a6393d1c0b7a2f8a95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5488 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 IM6N<$g1ZBtt^fc4 literal 5865 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 diff --git a/android/app/src/development/res/mipmap-ldpi/ic_launcher.png b/android/app/src/development/res/mipmap-ldpi/ic_launcher.png deleted file mode 100644 index 380afcaa536919032308f23b7dd415efd83138f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1753 zcmV;~1}6E5P)0Dkx7GcSFX{a3&IRK4V#w<6;r8R8X-bOb2;ueE5(3K4mh{|xQv&EcP1zq@$# zok;nvg#hgA^&d~K5AnmM(U%p8?ocYp|xAr36-8S|vVAb{OShaqnA|$0gIMJcq;ilX`!x9jH(_jSUYT1q1uF63+kc!*5^YZfMO1e9CnpNXW-5d zj7loT{N6p<(IS$T6#&&1y0i|9tFT#hpa2Rv7%9RFQ^+%;Pz++TNYbC3Gcv^cBvMYh z8mNLX$^9q_^$@+f3~%3o2m3HN2$dpKh8*Kw16H=+-4*nS68fdn$dxmQmoP#Xn6)vg z9zb!*MdnFcM-|wpqJR1r-du)LCHTTDa$y{X3Xu05phg?EYv_$NxOLwFdubjiWM+OQ z9dcPO7y#-m2j-32@a#Bz?F@3dg5?A0*cZTN%88N z%W!oWo*hSi@FEyNcWUTXHCuy90hul%v%}brHqqB_!ufH`<+F!nyKRw|vMtnA23#h+ zbqB^u@bVeNH)yL3f4c{NSWak}0Q8l4xO5tf2Z0aGHe6dqFU>)JfFuv-F;X_5E|XPs zX~PBZi?c9S>3mn%sl&e>W^QMv5yhg6m(X)hz;AD%OY6vmC&47^TeLEOJvxTE)>&MI z$w6dc{BXO^oWliBA2Cy zv1ID^9pSQw1PsX2r_iyI>rEFYVRqQX%}^iA3@7+wNc{z$ zTq8uRqW5;Nf4@(7sz~kW(R2;Upu-N8u5fh~wLgb`@ie@<0viVokY^mYnF_H<6{9e< zQ{(#|KVaysB`0e0fOhqOt*JqNsmi)0&q#rbvMd^5MX_|Ix#U13SI)Yw9eCJ}HX-jL zVyAOHo`U)5KfkLTsZXU))(MFBW|K@#uboo3Vjt%sJ$+VD*B@x>@r-&y= z!TDZazX{E@YX=JxP>#os`McZ9ZXIBz&tWF#kiiPN^#H;UyKVR5yMBkhwdH7!0=1mS&p$WE zds7t$rfngev4@(g1&jz*JcBk`5ahD6q8K0x6EHsl)y|MF@G$T5tDMKJ`#bcv+L5KL z2>W@D_ogcB<$Y*`Zmd0-%LMT~H}f=Fkk6&dXV-8d(4UVxcjx}K1-wx%q}oMl7Osb& zisVgaWR8qMFCfz&nhifE`%R&23IW;((fwN7$-B3_WQb)=qe-K7=k$)7B=C{G90&w$ zvp*R68%ZmrTsE~Ad{FiD+KwN7wIw=;Z@}arY`c4y;%)-R9p3w{d-D~6J~t7F6#^^! zW3Bw#GY7#39ObgHU;ksJ^3CUdx>acZIYei=vNO;51f)R0n$?MF?l0r-Z!VF%`6NIY zz#3yHm&=Tfj^g`1p6AhSx5?#l7-I;-5WuRc`=29X0n=X%Fs&`If0epZ=B-SbHR{a@(6SVXjHKu{`400000NkvXXu0mjf3@2AB diff --git a/android/app/src/development/res/mipmap-mdpi/ic_launcher.png b/android/app/src/development/res/mipmap-mdpi/ic_launcher.png index a06edb8a140644865b67b1102130842e460f0ae0..4442d28de683bcc79fa92b2ded264cd17ced3b9e 100644 GIT binary patch delta 2845 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 Hbd32Q{qVO~ diff --git a/android/app/src/development/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/development/res/mipmap-mdpi/ic_launcher_round.png index a05f7659d0de1e9bbc2d9f3371891f23524f41e4..4442d28de683bcc79fa92b2ded264cd17ced3b9e 100644 GIT binary patch delta 2845 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 A7W!Xbo92mu3xKrn$M5CViGN>tW^6%|y(#YIFw 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 literal 5615 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 uYlOWo6aZi6=P_5T1b$a*FK diff --git a/android/app/src/development/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/development/res/mipmap-xhdpi/ic_launcher_round.png index 7d9fe85bfce5874a2342f05b8c80977e05607a62..1cf62c5de53d9969e08d620c05aab00429d8fca0 100644 GIT binary patch literal 6331 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 literal 8229 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 X39uM!3=+S&00000NkvXXu0mjfX?^3P diff --git a/android/app/src/development/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/development/res/mipmap-xxhdpi/ic_launcher.png index b6a3e55257ce0f8150f480fe1a31c8bd964a42f6..474e8eca239a628c8fa474152181033b0361d72a 100644 GIT binary patch literal 10090 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 diff --git a/android/app/src/development/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/development/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index fe8e3c4be2c619c3326d7ddc92d52ec8fd7a2c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12716 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 diff --git a/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher.png index a6ba2750e92dbc172ca4fff6b4c67dd1bf80d292..37c8716987f7c6c2e1a902acb607a69aa57840bb 100644 GIT binary patch literal 14441 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 Ccou>H diff --git a/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 3ab898c20c6b59557d0b1d074fc6d125ae9de387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17700 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�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 diff --git a/android/app/src/development/res/values/ic_launcher_background.xml b/android/app/src/development/res/values/ic_launcher_background.xml index ad6f6d9631c0..f86b6cf6e2a0 100644 --- a/android/app/src/development/res/values/ic_launcher_background.xml +++ b/android/app/src/development/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - #3DDC84 - + #03D47C + \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f1c7f65757d6..8d69c62bfd1f 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -92,7 +92,7 @@ + android:resource="@mipmap/ic_launcher" /> + + + + + + + + + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 80b730f3673e..7353dbd1fd82 100644 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 80b730f3673e..7353dbd1fd82 100644 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index 1e5a088c3e8bec753d27aedf89ae1ffb06d466f5..94269b994fe4ab002fb3f8ad13a21457075d7ca0 100644 GIT binary patch literal 4142 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 TXnK<0uQ_WAd-Knx_n!R^5}_f9 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 1e5a088c3e8bec753d27aedf89ae1ffb06d466f5..94269b994fe4ab002fb3f8ad13a21457075d7ca0 100644 GIT binary patch literal 4142 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 O0000L;%m|(~d*qI!Kqc|Nb={;;!q@C%LYB zSG%t5c-`&ueCqCM_PM$|H{3q&*8qQ}K75BUd@RYRbvzJ9u=L^?GwSj+FDHUW2sa7L z-PH?7GDo0e)_?hzhU(eqyC%oEcy?cJ-r)8%cdALdy1aLsU7p)L0mcS8L%K+(*b~xf z^wIuMZ%hgW8uHA#J=;I1sTI%+ZFOI3zNHxVdHFL( zr-wPt)w9e`D_HWIYuJQ_r`YI{8EoX5JPtgg58q)7#(zRaktbb>Be3D~Y}Mn?s}?}s z=l!J;E|@h{2xNU$$tLYu#G)2CSpUpK7B*$lU4bze3mM2ND*~OQTlxEn_jNrkJ!`6L zK#E&H9y5ga6$Y|D-^Lz!egPYlm&*EOBm@!dmtkN7vXa<8PnX>8KZ7c=8q zg)FsoJ%{nFBHlM@<1{`7V--2lF`RTwd2ds|{t%PpxLCh8Om?D28(ZXfn)y;O^Mbtd zQX@;;vpgVF`e!Dw5v%h!Vdqy3{W-z#DLv;52baLp6UaejNSu|5FOY~pLn znDygl`QPBcxm;~x*~cqO)Li{d_Q?A8#z>m|POePO^S1VC7QMu&gbnh#<6Izl*H!5p z=nWvFC66%0%7&Q@EM}RT*-lnV-+_yduYW>U!v3Yh)tq?~9yz|+j@m{#sAQ!Rf4Y#T zL^u#R+sZQAg2Tr0Q5kK@++G1PT0Pj{!}D|GG;3fJUs~v&B&@=fCYJe0S)rP9Kx%Sc zZal&TY;KDgw zYi7<1+i#i=Y%+l}=PuF`Wr0E-KJv!JCXHF{Ruo}ow8rk{z(9L4owTNqFuz|Cq({K` z+cnC>MK5#t6Naz(4#LQKq_h~EIe&Mt0*>?bZ(xwf`>0by+QjL3w?j(LfdtAVIj3tv z!gaYRNRNQyLIaDKn#T2@6v;X!)l9r1pp>57R`DC6>@V^02NC>C?Lf-@B8AMT;^{#~ zx^n=Pr*>R#Flys;MHfmD^a*aZ_No)a*`G>Ht;NF}ml}NPL2=&siUJ;oI)6q4?uP@g zDRjko=JP&rGTXnXz8+UKCq{9={KpLsJ3Br9R0h%K=*=^^Ffsy;e60aB^c)!WWES7} zT3}+d@_K+xk&VCweToC;>Te|fWO2OWfc4#V2HL#;Q3lZ`iY*9ZGp4;;9ArQZJqJP| zW@T=WydGc^wjl#9=o1b&E`MzQI_=ehWW|B>mQ{&b2Sh3hccuiCx_Y=D4!~x((tzy({8eR~v6AgXnYQ+DEzYfSk!J?f3dQTR_hN$f3&A0-IASuZOg^ zH*y`&1up1Q95`G1uY|gJ2E~E6jjkBS#lTHGw&KTJ81;{F-`zK)o__>nQgWIML}F@8^QAu_0#v!AW~Uwq|^9DjfG_{-^GIj3qq=8ELf z)pT$z)gsbNM9#6Y>=RW%217Z}9YR&3Sn0^w7Cr{H!9mR_>*&@t;u^&n3+`ecm=CPk zj2IJPgn~=l#(?qlPwK8hUpWBX%V4{J&Q2Z&7Ehzu>CtMn+PQ}a6>X3Tt~qzO4N& zu6$-bxLNnE3-Mx0Zn6{6slQsa134GV$5WU}F=};`x=4p(sMJmWbE(#Fx5)Ugl#SUk zOS(GpbblH6W=>9!IJ18l-t#)G4&ldS#(3+)# z4)2SSf4!Pnj+RTW8r3Ivr}Qe(aC9nmC4)CzyvsG1i_Ggu;>6X0(V0Ez=4{CW)vku zxGN_7{4}mDQt0@y$zd?jejg{AKb z{z+92VmxG_1G+Kw?83mKBdn+50?!gV%k>YMx8{QolnXYkG* zMB)j?@Q0$T(f0Vf(KAzL0eD6qzLUpbEM%lxm9{W@pp8}pBuuT1gXDc8RtNw8@FN*` lMqfC_;3g#zzxO!*KU=g~l8Bo|oD2W}002ovPDHLkV1njxh57&h diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index dbb1aa03249690ba5ca6b8f2aa51c96ef64fe98c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1608 zcmV-O2DkZ%P)WzC?<1;EgP{E5)SMmKiszkjg7*P*;5Ch^(MewG0 zP!h!$#1Min^x#Q}B1n=oU>1|$=D|k4uX@+r`Ko5RduN>K?)m@VVR5TjLsgdwf73n8ctlw5fZ&4=rg?>(v zP0!lY?7wZX8rE_eP78X#*m);X<4;h-e@H*~k^Qqs+c%rXgv}FlnTB3QJ>)f&^d8yx zo!XSmo67(lva)^-HRc=Cs0Td_-EBK)%i=OYZjMq>_$W2v9#6xzGya}me(GsRX*8(_J|XSXDym(j#+IKgv-*$W;j>f}TuJ(;DBZ>+ zt&^WH`V5VwXUeR=LQHL(8fu5zcun>d^}hSnc>PqFJTog+oI>T?M-JTP$$#Er{fz{KGl)HsJd4aT-h#lh_|N!KyKZEo)l zo|Q5X>s#75>!Y?~Q@7zUE7q@2xgXm_wo*e|4ut?t|lXRWY+UZo*0a5mDm9``)6($^U8aG*Y<)a7= zV|)j!jUbk?^5Xj%Np{2YQ51*8!CI&6B&?t!B!M)dfoqpYSt>)be} z(^SXG;D)PxCncFkcUV^2D6`HD*P%JjJyKF$j6NhPw^>RuQ7ngT7I_|)lJep-7)^^8 zL!lhznc7zdw}&lmfG(87oE~;aO3I5nhUMEsoTFF{tMnMwn^|J4-&1_tk!F#;OJ;L8#7MX z1&yU#6jj@;kM(Cx*<8m8QJwR!Bt}u*2%S_}<5Eh4@5DLM4@g;C(j1oDxcniXVpJ1qO~)OHZH~)-#F&V)$};(P5`0_XDm~m5TBO1BhK@)3^}@YwQfISJ-zt zg0(cEctJ(AVfky|XGkRvc+HJ(d{vd#Y1tOni-l*5d~bQa-2H0gf(xY#NPLHbiEYib zjg=Mq${RmF>y$?pz9i*9(%NB(@rJPp9_r|;l8<%xq<~+BlleDW{zKLQWJo3N@yf=N zcEH94@=P<+dx@m6C&m26qVwj4&o*Ph!KPlbA_A`K-^!CkP>aoH4 zwmlVO7-ZYv~`%GgIVLy?&L{RqW#?--MFt)Ks^wfPW zQpZhe#?PJ4@_)?QirCrsUjn4hG+rTmk|M77je#u4bYp^7<7UN&FEG>2tsO<~(CHEf znV!b~@-uOUuZF0xJx!g^5vBY3nooc{+gNR%YrO0!kL%BV^bp=(qwMy2Wgn|m_K}qu zM{AUQoc?}ym9kGYgpGkLV+iSxJ&n~-9ImbT2HI!hKYwv&UC&y;1?=v)lD}K7ls$aZBmY>ncQTJvQC za+zIB-uSOy>50`!wmhY*;_*u4WN5-!1Fnt{WYDB6WvzNd$=@%hRf+oz@${T*c!enF zSV-9jUw`n>(!LZ)zK0aPS*fh@i8Q-|JYo-!0mF&h=nQ2&lC7*cqm?y3M_KtJm6&k9 z?wfsY(3rd|C7+$8?2h_qBTlT^CX5j&1-6spWly{+ntY>@&(Bff;lUn>Vd=_x^g(5< zovvhSDU=4?!{AVrl3N!jYw1MoVy@u>*u6N0{C`HAZ9=Rm*-=;H=a#%VIXJDmabzH1 zjZnDE`dQwrLopGT&ll=I?e@7sZ|GX1WZN>12X;Nk8aFsRo+qyffqyx6uqMaPG2Hxq z-xKd-0sf%E%!54q7YfPWtG<$5Cj-s-UO8wFOGCPw7lPZ??|yR3eXeWFRlI_l4hEepO7;LOdj z$bN5CkvscFC<)&DSx?PcFM3{uLv7(vO!t1M|!Kgy~z6xs{p0=d->%X727mfd z!jRjZ)bDj#h3j4tJC+P#&dl9OOLlu*spCFwnSk=Zq&c2_q{>8vH`@T{-7?qR@YrQd zyn!3Jk=$3lj16G!&I;J?)^B$$#S;NVN_0Jw&YM&yPxoSgHFu1XyB8;geRyS9j!&K# z?<9?!Os}uu_Q%Q{0=u)Xys*g1V}F586qqQ?SO}E|vUPD-QEvuN;D`EM1FS{4t}MB8 zk$!Ku9jR_7&c0OoVqrfbd?C<@N@A`mA!JNO^6~)q6bz7?ANOP-ZR5SOGt1+(ABd&n zzUUdSr{b&R9)EK?;YszpsaLG2*&zi1L>M3@591v+glA?1tIs6B4$Xxj^nX`pN0XyE>mKx;{nJ-c<(o0U4c%e++HaBhJ9+y zMYj{4lrr57jPi1#f&iinz<=^ng_#IW$Eg_bYN-;V?$i30n=A+mRcl1q_gHulzvF&ib-vfDnDi zs^e}aJm~-q-)BO!5;%+`Dsd5Izzt?0t7*C`3w0L1H{9N;>?F>8HGg$o6vZgFwgfuS zj>iWM2%%jOC#ggwE}{%5o1kYp84_jqLFKzuFiOj!Rj{cd2ypvt`A*`Trn&17sZdf`11rMSmPj%F?7LBgi+BD2*_Hfh(0HkUxAPEC)bIO+L>V5CvqDTf*pK zuA}}xqGrNq=G;6X<}auFQK@=}h4{*894uHVW@F{#=uIe@0lgrp0hs*>PV%5SNSc*0 zoZ6NhC9bzKW0$)V2ekV=&7J&i^yYGJ6=-9@`5>ee2Eb?O5Py;?O@9w6f1p5Y}2#8$XuN7}q%cdb_P2Xi)pQ?%I6-3#HV+#V*dUl>Sh7;Y=%cEmHEeawYdxP-VG9$sHwpFtO(4=pxNY3Jk>7kDYSC zBmW6cV1G+-E4VPHlrDGCbUa|G?y+~5?sHZ`FR4*NwGwU&1XY*rb)y0H4Wvt)Yabq> z%i`e)x6&|x(lXK}=X!JAHf{r*J4@P#!vN-z)bEouJ)jRE-F~_F75?P~f;p(--VYp< z4*A9zXIOJl+Z%8vgsb;8(`bdte6t?cKX5BMNGT$KC zi+@HhfG*Z~&2E#dA$Xb#VFYdhGGpJ*UnloJeV&(EuZV&EF{C%3kLi!G$TB1=wkdx- z$sWu)peyBoy_TkPFkI?RaYx_m*t0X@_HW9LQq}q|oD37W@9-V^pfAR}R(=#R zAd6+Dl;>}>VP>?F+X!DF+$W}FJ{sFFbAPS<%i>mh-_lOhEOe&+D{XN9V9;lIu=;}C zwzLy{&=+H9EN&Jc<2IJr>|EO3lIH!-1dPF*J&5!tWQs5K9WEZ~pDXe*CNuCE@9>@O zgT5G}PgSA9>{d3856TpK$ZvI=nAO4mKYZQ+KI2^)_rXaDV{U?<{}0P-@2+fuat$Q_ O0000L;%m|(~d*qI!Kqc|Nb={;;!q@C%LYB zSG%t5c-`&ueCqCM_PM$|H{3q&*8qQ}K75BUd@RYRbvzJ9u=L^?GwSj+FDHUW2sa7L z-PH?7GDo0e)_?hzhU(eqyC%oEcy?cJ-r)8%cdALdy1aLsU7p)L0mcS8L%K+(*b~xf z^wIuMZ%hgW8uHA#J=;I1sTI%+ZFOI3zNHxVdHFL( zr-wPt)w9e`D_HWIYuJQ_r`YI{8EoX5JPtgg58q)7#(zRaktbb>Be3D~Y}Mn?s}?}s z=l!J;E|@h{2xNU$$tLYu#G)2CSpUpK7B*$lU4bze3mM2ND*~OQTlxEn_jNrkJ!`6L zK#E&H9y5ga6$Y|D-^Lz!egPYlm&*EOBm@!dmtkN7vXa<8PnX>8KZ7c=8q zg)FsoJ%{nFBHlM@<1{`7V--2lF`RTwd2ds|{t%PpxLCh8Om?D28(ZXfn)y;O^Mbtd zQX@;;vpgVF`e!Dw5v%h!Vdqy3{W-z#DLv;52baLp6UaejNSu|5FOY~pLn znDygl`QPBcxm;~x*~cqO)Li{d_Q?A8#z>m|POePO^S1VC7QMu&gbnh#<6Izl*H!5p z=nWvFC66%0%7&Q@EM}RT*-lnV-+_yduYW>U!v3Yh)tq?~9yz|+j@m{#sAQ!Rf4Y#T zL^u#R+sZQAg2Tr0Q5kK@++G1PT0Pj{!}D|GG;3fJUs~v&B&@=fCYJe0S)rP9Kx%Sc zZal&TY;KDgw zYi7<1+i#i=Y%+l}=PuF`Wr0E-KJv!JCXHF{Ruo}ow8rk{z(9L4owTNqFuz|Cq({K` z+cnC>MK5#t6Naz(4#LQKq_h~EIe&Mt0*>?bZ(xwf`>0by+QjL3w?j(LfdtAVIj3tv z!gaYRNRNQyLIaDKn#T2@6v;X!)l9r1pp>57R`DC6>@V^02NC>C?Lf-@B8AMT;^{#~ zx^n=Pr*>R#Flys;MHfmD^a*aZ_No)a*`G>Ht;NF}ml}NPL2=&siUJ;oI)6q4?uP@g zDRjko=JP&rGTXnXz8+UKCq{9={KpLsJ3Br9R0h%K=*=^^Ffsy;e60aB^c)!WWES7} zT3}+d@_K+xk&VCweToC;>Te|fWO2OWfc4#V2HL#;Q3lZ`iY*9ZGp4;;9ArQZJqJP| zW@T=WydGc^wjl#9=o1b&E`MzQI_=ehWW|B>mQ{&b2Sh3hccuiCx_Y=D4!~x((tzy({8eR~v6AgXnYQ+DEzYfSk!J?f3dQTR_hN$f3&A0-IASuZOg^ zH*y`&1up1Q95`G1uY|gJ2E~E6jjkBS#lTHGw&KTJ81;{F-`zK)o__>nQgWIML}F@8^QAu_0#v!AW~Uwq|^9DjfG_{-^GIj3qq=8ELf z)pT$z)gsbNM9#6Y>=RW%217Z}9YR&3Sn0^w7Cr{H!9mR_>*&@t;u^&n3+`ecm=CPk zj2IJPgn~=l#(?qlPwK8hUpWBX%V4{J&Q2Z&7Ehzu>CtMn+PQ}a6>X3Tt~qzO4N& zu6$-bxLNnE3-Mx0Zn6{6slQsa134GV$5WU}F=};`x=4p(sMJmWbE(#Fx5)Ugl#SUk zOS(GpbblH6W=>9!IJ18l-t#)G4&ldS#(3+)# z4)2SSf4!Pnj+RTW8r3Ivr}Qe(aC9nmC4)CzyvsG1i_Ggu;>6X0(V0Ez=4{CW)vku zxGN_7{4}mDQt0@y$zd?jejg{AKb z{z+92VmxG_1G+Kw?83mKBdn+50?!gV%k>YMx8{QolnXYkG* zMB)j?@Q0$T(f0Vf(KAzL0eD6qzLUpbEM%lxm9{W@pp8}pBuuT1gXDc8RtNw8@FN*` lMqfC_;3g#zzxO!*KU=g~l8Bo|oD2W}002ovPDHLkV1njxh57&h diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 491227f7c4e46c213339b65c9f3455b0ddcf7a73..d1bc1f7ac4733332f52af56a5c1dfaf32e04bb08 100644 GIT binary patch literal 6010 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 literal 6289 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 Hu0mjfx@RDz diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index 043583ef4d36f45995eccb0b076a4a3ffc977b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3633 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 StSA;Qr!f($WAfDi~0AV8Qx5+$!v+oH6JO5r&x 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 literal 6289 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 Hu0mjfx@RDz diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index babe2f547240ca6b0a7f5e0cbfb13d209f1adc0b..630ffa310345e8ad104c3642d58567aa08b2a1b4 100644 GIT binary patch literal 9490 zcmV+tCGFaYP)Qf{sxXc^jyIycCO%e9Dn2Zmg9SlA2|#Y_#6L+@9>-7$vXLa za1C)Seob5(_pskqlp+< z<9xwk{`m;*EhHD(Vl7EBm4l+xleKWwqM!TO4f?r)wR{pkG9`wSD3B;;^1l~2oBxA} zA5Hw^0`)stulPDYh9TCsXbakewh8rTElSNLODU94(uPlfe!gG;pQwj9K6Mc0ygA9m zB>9Q|+lUK_31+!x2{Hj_K*dHJ{oE}*xk}i`C*bQ6l17pSs>wNthQnmnfx3+cwbq>dc{>!eo@kc`wC-HB!QCB$Wp9!4j0*G z{HAiMDzC7qHtw|@FQL{F-ZuIuGe!NWpDVcCqOK~2M^##oK}sy8i1EQ#g&M=eDOMNt zbivhpa1NA^I`#ofLZR5u=3|Dj6JuzPkyYwq3EQ)?c@wzG`qCnGN>^PSUuCfOmmBoW zg$CU;)1VJeHt2onhE_Pz(DH{F+NvRjmOIqY3WginZ6gi3I^Ce_`EQ=%zkTZ_gB@I9 zuoJn?>&6o*P$~`VFWIS86GM${W0kvEMA{}43mAsW*wZvFgnxYK7!%J&1 znN|@$mBlBEzC6d!^0?|5o+c%WeX>gn{N88-R3P0vCq6{7s4 zoLtpdKX=O~CV9Sd3`8tAm1nTsiwyd}1Vc;jYLMkI z-d1|gScC0b8Z?mviMS;Coa|YgT4D|=Tu~zQL~d)|slP~LIX@WkoX!`6Pr2br`nGXS zQbhr8JLLvFdv}TKlf9q*AW3w5)nCcm+3icrMTIGf^(XQh@y`4)Q1Wo2l&<5dYIrB< z5!olDqJj588^$Hl&&M0=;PRk|BuVtq%FoHx%nGK?lpFc}s+!#9IUg8#_`uTb3k)rz z7gqz#of8oh;Gw1Q>vwG_U3{QhOZk8C@ZJ=l+NSh0=xg(MUjtEV-@!Z6kFNZLJUvq; z`j>kbUj?!@kB6(Sysg;Db9jXa?1{;=54;~Bh68td^0kJxXdt&o#u)UMHyU)?e1q;? zEP{);Cp&Vp1pY?AanE8g!Q!`fal0#fpbQTTNR} zaf~eOabbx$DtDzgl&~4@gZDLceP-~prZ2LmzeZ2xCf<$|7+3S36Bzel^ zvWFCpntnF_E|WYlN0;dn(+qNbd*=X03$E(4i9N*f1ePnfP2jjk;6TKiPdvSMthje9 zl1aOwy$?)}CB(H1hu$Ai$lrC6hLT-z&Dg4(ehgY8^6**a%s zUlf~+1f7-rC&Sq3|?%6aXw0&ff2B<#2W z?V=BIas15mJfXHp*ZJ z0*C{JgQ?2s-o?lH97@& z@CbF9$o?gNC%>4|T+C^yM5(3iL)q#4U;0*E5TB1vi$2H(d*|61rSoJa5-@joAh$1g z9&;Lhw_X{}hjY3zb%K`u64Y({T1Ic|ZgaM2lu&6gE#%Z8?C)N=)&OGu&Z3wD#ZNTDLzXDMtSe?h}TTy@>p%h_o=5a-DmlJvGhfNsfjbv(2M z0}Qz5_PP(6tlF z7qHwCqOD#)H_vq?5Y!ueY^tNKE3nv#beFAj0`|yM+-Ljz`o7~n`q#9^*Z?`h39;?8pj(Zkkbu zIVX?DnlmKVM*y9xA$e|(*E0$CFO6#JjW)Y)Fxhu!DmQ_|y4lFij_cc@U6<KN8G2)^;rXH5uQgmf(OdHKx?p{$(=q4E1Hd zStM|YqNR6pcFGF4?T|k9x-p{C69_nw8&zBl2Re9`?q*DgJv3<~IN(o>$x6C@Eaz@N zu^(j9xjrGtx_djzQ8!j31c5l{bFSdrE|kf32GBn*K#=p$3yjp-3-@}#s7^+Q5=W4p8e zNeYK{5M1ySR5ZOW_TJJ-;zC}Jp?hVntMM$h?qcJey>0;TMIan*Fut4IFCPcchbB4N z83+!p5R0ge{@D5^j@z@>jReg3`^yaW_@qp5ffSCfVy8*?B6VJh{=v$%fLlfqJzTK~Ev-li))1 zb`W&kc(LiMDm$@iuV(^%xKf^25uy`Cz`;s8ZgSQQ2!05pfk0l@kID&f@~k+5CPcrA z`Zu|U$J1l;q#d+n?jZs@2%Lz@4pR2d@_w~Baei;wKT)eN9CIs9Lk-c1;?BfReF2F^ zAhBFDsDqj7ui!*xS`<-fX+Z02 zPxd&|eUF+v08V+2xJj^cbA!I*F)rZ|2}d9f9Qzk>+>xkv$0$d=h(M|<4C!@aXM+>b z8PbwKRp`OxtNbiqU{&4Gcq<@E175nYBOwX&>O6TYUx>aH^>JQ5N4@xNvI}5MPQ8ye^ zmg2@48^MVv2_$Tw3)zROUiVC(gUjXnBSJL3s1w}f^wbF-NJs)5%`voTE^A}GTZ_be zN8PaCbB_?jOS6z{e^GRkvp{XNrV)SyIhj@cptH|!%;UJOjlleecq>}-o-d7ST{Km zrpWaUohgJ%M*pW>SPOkZE%s24PR5hy@t{n~j9+64pb#;~`g1h4|IVY;JU zSYYnC8AIQk|2Y|vdbQw2L^UP}ltK!JHR1a2ubv6CdR*icczP2<_ik^r72R9PgSkW0 z4H5}Upk3LHwv+$}ghcxgbwfi%qZj>~+|;*+;6_9O$xwAw^1%2GoIL;WOdxJNIvQ;S zck$tF+Uo_4geB0sOB`(}0T5`l4+8C3^gYSy-&1g7e47ZdAVr{`r+4&4pjAl%0p*%N z{v^f+xk*SmO`{QVF~1BM8gYv*i&YtJcVvo)<4ONE?opS zq9V|uKF!(b{J(f55X56-H@=B{ol=OpK_X!ZXw2VaycVR zQ3N97GJ0aw$DRpjnrv1gaG294=d(wd>n^eCeKfcH%P`Nav_!a>Io{BhoJ7pEcP2C69O}&k)XErJUR)--qkR<5h0xeUyc_qXT6lZc~hPskOvh8xTdrY zNR{s^4N*5JBqD*}oFH-D-memU#Ct|U)C~)$utUqacb&clobW=ROW3CAlT89e9Y_RR zlj`9KJnz91@PULRkXuqcVnDy}c+?A$>h~=%Xu*&L;6!u;8qy42Sani3>{?D9&kL&b znHla+LY(%ADv@)kw!H8gZNEx86Om zEccCt6T8PXPLgm0IfVGHl(p*9`~Lh3BOEjI^wc7*I8mCf+R;kw7Sn z)a5@Wq%JphcMAe}F{H)T=4%}tD1kn0#H+C#bpt}85lC$2blciIx1Y!T`KAZ9;YMt2 zzJgpypuQr;fK;KRUz>~hXKngU_5+?hF%F9NfQ9Hp5ulF|Z1Zveqz5DvfpEBjTl|NE zK0Mi3Hxl51;mF^06P^YaOin~};Z>m|?Mkq%7JF)1h95(ky_)HoT(6Dq9=HAReh7po zSez*T*wnay?TM4;d3c3*TaTkZRv>`*cDA!_B*1`vcd}EY;#}8zJ@C(VPRG33M{o(DH{zUYSS7mJW)`OH~qvKzR3>OY~W+ zz9IYEg+Ao{{= z_t$5^ea9OOL(~ro5a{4?gWfml3C@AK*e57B;h|8HS{I&JZFcAI5yB$(7!MM$iE-VX z9kM}NImB5vMkEA*Am#D8^bq&50%PH*8xdyw=dFc5u(>^_f&-*Yov00HRW#B}q;=Hb zXiSf+IPFUc@j-Jlro~Iryc~QK1u8v(PV=#SewMrRfn(rhBOw6kgNJ`(#;^F?Hy0d` zT!>nIq2R|lY1gnO|Ey2n$Xx4(K-h<^4U4?EDvqHI__*InPoQHf4Q*y0cjI|t5AUG~ zrM~VR{S@Y&v}u6T>RtB4hc3zvx}4+<8p2ucd6$OBCAoL3qhk)>^sJYIJ9Mg26A01= znV&8Wibx-R(rfabslIkB{ElRFnJDJohy9}pbY4|bom|F08?ysTJtvq6;QT(fV`w?x zO?ZAtXzR@i#_VD-IMMveeiOXjb2V;HG#D+9H_Zw%*&W-(zNd7V(xvaFIA*BCJm`8 z$?RT(*|D7e_*x%B)D$mCvv=4AZB}35WjN|5I-tH*4snc^9on)%K2l|*@l0RM{Em$4 zG*--YlbV-`xsO48sR9vpA-TL-UH;jGZJ+Luq#!CZM~4~|Fjd=qo7k(nBk`cg$2(+w_xG2MV<^&ZVW$oby0OAl~WhHS*J!9}t8 zKi#|Wmmm;lP=*U0B53Hx&NAQ3L$}TQflTRy$a4cyzk1BZv$fzNVB$rj_C?rS){MP6 z_cggS$Ga555x-DVjsd{i3)8#C{RrR+4LpGNr8`N4Hw~>E>Th8h(&x}}gFTS`Hs;ox zW0gD>2!T*wNL4YVP(w1c`w(_$**CtV5P%4E)^#$ErRO!`Q@d$^!FC3}uv+QB)jN!2 zZANdArixcuic`n@Ja|g_yfWusWJGGZm|H1*aD+=t#b6xuZXX~}pW zQV77(1sBPPK#T3R0WM`E1mLOS%x6DRM*-63z*2+WJrbT*Gg7}6UaEpc^gxVfdyy`^ zWN1Uurd}7ichMishIoq$B~kV;w=J{hX8a#%c{vV`YDliEUR%s@z|uz*>C%ItlBrGU z>alskdiNTgPNM9AIpZb+z4`jPFqiR`KB`Dt2uu7IlB@VQ3OckG&LoWOb_5 zBZwJ{>olD0UHmWEusEqQ?(xwFC(1=cyo(G+u?*@UcXr@J4g2pa3V7S;ouft8pja!! z&Qg3LM+%Af@vsZk9KAUETQal_4Cf~C^1Q+oFcdL@OGv#MjrnIweckwbL>N3Cstk*< z>nDd!k4eJ97@P(ttUQ ztMpMtNg;8L5V`b%tNCYZZj9{_Cpq}_%EEz*cQUBGbAYYr++6I9!eV2&4nks0@bv}q zr6?}vC;`~69P7GZ37G3${DFTTb7syRLNl1lQjtEY6dTl1{52)bF7H9NFZfJ~-QY+h zc3nma-z(rZ{HYa0!uvQpuLs2uye)LwJVRSF(7-E~A|8TZ1-2vmiSL90$O9?8;l|I& z)ph!aIjeoqm0}L#Y&eH2%Amefsj`%;zBAdLMN*9gWDn8Dr#T1K4gC<9yiTeB5XsAy zmY{%p9^=G$X||y)>@VI_?P#Y9v@u=n;aL*4s=E(TL z(HyL58?AS2Y=gzjQZ4o^CLa+;7*;v8$_ zX5&PCWc6XW0DtrU!*}90`0X8|MP2OiCw<$-MsO>*v=y&K55o4r*mG^5uT4M5=LF|G zH|H`3OHs%)EHl+*FJQ1-=0Gs2#s!TCbSxnq=%yLRMWh;mD|_d>0v^nE?!jdA=9A^_ z!T1KY%D}Zo*Z_nD@HhU?WgAUQKu-9~K60n7ABkuO#vC5kLle&MxxlNMTAFi%fT3Eh zD0Atfiq#&1Yu|)_w$dBb>Y=?b^S{JX90ZAg!z;w~a))~LVs;;i2UCW!z%q3738<%|&TX`sCE($UhMs4Z_7&K+I+LBB|QArzLEbSiGR1fwuH$CAJ!i zlfv-c*g#`bc?g;Ofa~h(#+}x$s);jwKpu=eJTA;dsV!9mQ51<_?bju>tGD2vZBkNF zI$BggbWh?#NNp= z^fhDN<73*t%L+)LeP+6$ zflxTzVn|1>?pn!(O-L$ubx=2Ug28>q|KU6Q1};5_h?otxXRs4iyJM6=H_bE{4s$Av z%mB5v_41q_*v*3;#F%1i%`sMzr^1p)6)TCLhwG3F$kpWHDsA}RsVN!V=V;GP|GkJ> zL!HG#r9}b~)Nqu^n+pxPai*|O=<0NF+CFy3;w8d(4=jS1BH3%rIBuX$6{#5X?JW7u zk2t?L#sR6aeiXUPPfYzRWnz~Ff;<@03kY0w7|a;!auX;Fq9~h4oO(vYxqBCbMC}l# zU=NPpiyRd(89}-Fl@V%ewl6UB)noSS4Qlko7?Qddw-sY5$5we;67-A7v z$h(S@s5Sp=3%f|q8@!smJo{@iF)cm@c14Ah&OeDT$fg-z>&pkO#h792%m)!EsTfm? zZKWfRwWwetqM`GzqRjbktVweqVIf^|r;UL2a9nkO4^NCC(s4I*CBr~MW+OdaO zpXOtQ%Hm^Y8p~LJ#8_fXF}9UPZG|gp*#lW{NTr0q*O=54Vi-i~s4p3CD}8qQAB4NF zJhdR>M&%tc6-Ihkd-)hVHSLdjR^QuAFRPt7R*lWE!x)x&MqybOMIvQfL;N=2PgF}K zjr1#O_NI4@+{9j*{SUT(i8-*`1_&rotz1G#9NtGHf5EYMVb(wBtwW#J>(%I6EOn~1 z5@RLDOc~1wMIKeGb`iucR*4b2uu7v2tY3@KZ1w0j*p|8f7Ex?D(3MNIp)ayehOhx& zne%V`-cfI|zAeUtkUAJ6j1|VLQrkPx7A1}3d&;CI(SZM}1*usrmB8KSgUE(=n8MbK zd5dkH^NkSeunS;VR#f$-)RfvGisg-$=X|5zH)bar)_$5voK!Ie7z-(NFg6$?j8#HP zop8l2jgYGg{oYWB>>AY&Bx^5-)W7*ycKe7;?3s+uL^K;|s<0JQ9I0HBNu-y`c0$@9 zi26nXB4KSEuSH2CxTFx(Fcgsph3!L)#Zy_V+B$HgvB7O7v-}~C z>yJ-9O<$S&t?=Gd0=<<`@-t4P64z8xu$VBAj*v8hG@0L`jc6;oq4gBB9eqGwM4zO@ zX>9fteMa9g2Fg88lE*^{Ma>$R7-(s6Y7nlGaJ$VMwT~tz5d|%L+tsPe-bez z>=FT?-&djMg31kvD` zK;&aBsA&(%J5H@#voYg>O9>(p?B0RJ2RC%%&e>B`aBQoooi(hycs zrmbiL+9KOzC5=*3=mYwaBu*(847Ob=S;>S*E!{2F z3RJ9Qf@;8|K~2CoMIa6_6-WZuPl{NO5Kt|cd>FKl8X$ue_& kR)7pv*uS@uBw@+&|A$v=l}o!07*qoM6N<$f;o2@9RL6T literal 9772 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%0D8@~5E-a?-&K83F|) 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 literal 9772 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%0D8@~5E-a?-&K83F|) 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 Y5T|+;$EqI!fY+algrazbs8Qhm0SlB3_y7O^ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 6ac2e4ac202e756aee8d21c576f87bd955dfdf60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8283 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 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..d157a530d098ead7a744ce9d5c717688b4cd8130 GIT binary patch literal 13606 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 Y5T|+;$EqI!fY+algrazbs8Qhm0SlB3_y7O^ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml index ad6f6d9631c0..f86b6cf6e2a0 100644 --- a/android/app/src/main/res/values/ic_launcher_background.xml +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - #3DDC84 - + #03D47C + \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index c04314a9aa0c..d7e9529ae6dd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -14,6 +14,10 @@ buildscript { multiDexEnabled = true googlePlayServicesVersion = "17.0.0" kotlinVersion = '1.6.20' + + // This property configures the type of Mapbox SDK used by the @rnmapbox/maps library. + // "mapbox" indicates the usage of the Mapbox SDK. + RNMapboxMapsImpl = "mapbox" } repositories { google() @@ -48,5 +52,23 @@ allprojects { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url("$rootDir/../node_modules/react-native/android") } + maven { + // Mapbox SDK requires authentication to download from Mapbox's private Maven repository. + url 'https://api.mapbox.com/downloads/v2/releases/maven' + authentication { + basic(BasicAuthentication) + } + credentials { + // 'mapbox' is the fixed username for Mapbox's Maven repository. + username = 'mapbox' + + // The value for password is read from the 'MAPBOX_DOWNLOADS_TOKEN' gradle property. + // Run "npm run setup-mapbox-sdk" to set this property in «USER_HOME»/.gradle/gradle.properties + + // Example gradle.properties entry: + // MAPBOX_DOWNLOADS_TOKEN=YOUR_SECRET_TOKEN_HERE + password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: "" + } + } } -} \ No newline at end of file +} diff --git a/assets/animations/SaveTheWorld.json b/assets/animations/SaveTheWorld.json new file mode 100644 index 000000000000..ea3a7ae28e71 --- /dev/null +++ b/assets/animations/SaveTheWorld.json @@ -0,0 +1 @@ +{"v":"5.9.6","fr":24,"ip":0,"op":146,"w":375,"h":240,"nm":"Comp 2","ddd":0,"assets":[{"id":"comp_0","nm":"Comp 1","fr":24,"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"ED_saveTheWorld_scale_032222_NL_kjs_2","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[200,200,0],"ix":2,"l":2},"a":{"a":0,"k":[966,543.5,0],"ix":1,"l":2},"s":{"a":0,"k":[37,37,100],"ix":6,"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":146,"st":0,"bm":0}]},{"id":"comp_1","nm":"ED_saveTheWorld_scale_032222_NL_kjs_2","fr":24,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"base ol Outlines","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[67.876,-351.08,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.458],[5.458,0],[0,5.458],[-5.458,0]],"o":[[0,5.458],[-5.458,0],[0,-5.458],[5.458,0]],"v":[[9.883,0],[0,9.882],[-9.883,0],[0,-9.882]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.92,291.656],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"pole pole PEG","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[948,291.5,0],"to":[0,4.167,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":37,"s":[948,316.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":73,"s":[948,291.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":110,"s":[948,316.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":146,"s":[948,291.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"pole PEG","parent":2,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[-26]},{"t":146,"s":[0]}],"ix":10},"p":{"a":0,"k":[50.154,50.19,0],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"side 2 base string PEG","parent":2,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":146,"s":[0]},{"t":183,"s":[5]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.51},"o":{"x":0.333,"y":0},"t":0,"s":[349.654,198.69,0],"to":[8.428,-11.161,0],"ti":[-7.131,30.991,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.507},"t":37,"s":[377.055,125.036,0],"to":[8.522,-37.037,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.5},"o":{"x":0.333,"y":0},"t":73,"s":[388.654,51.69,0],"to":[0,0,0],"ti":[8.849,-38.09,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.497},"t":110,"s":[376.539,128.158,0],"to":[-6.961,29.962,0],"ti":[8.365,-10.787,0]},{"t":146,"s":[349.654,198.69,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":3,"nm":"side 1 base string PEG","parent":2,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":146,"s":[0]},{"t":183,"s":[5]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.509},"o":{"x":0.333,"y":0},"t":0,"s":[-258.346,-99.31,0],"to":[-8.847,11.796,0],"ti":[5.677,-31.408,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.506},"t":37,"s":[-283.482,-24.138,0],"to":[-6.835,37.82,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.501},"o":{"x":0.333,"y":0},"t":73,"s":[-291.346,50.69,0],"to":[0,0,0],"ti":[-7.181,38.877,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.497},"t":110,"s":[-282.912,-27.257,0],"to":[5.612,-30.383,0],"ti":[-8.554,11.406,0]},{"t":146,"s":[-258.346,-99.31,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"pole Outlines","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[67.376,301.42,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.38,-1.18],[-1.18,2.38],[0,0],[2.38,1.18],[0.71,0],[0.84,-1.7],[0,0]],"o":[[2.38,1.17],[0,0],[1.17,-2.38],[-0.68,-0.33],[-1.78,0],[0,0],[-1.17,2.38]],"v":[[-4.68,9.16],[1.78,6.96],[6.88,-3.38],[4.68,-9.84],[2.57,-10.33],[-1.78,-7.64],[-6.88,2.7]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1243.299,438.31],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.37,-1.17],[-1.17,2.38],[0,0],[2.38,1.17],[0.71,0],[0.84,-1.7],[0,0]],"o":[[2.38,1.17],[0,0],[1.18,-2.38],[-0.68,-0.34],[-1.78,0],[0,0],[-1.17,2.38]],"v":[[-4.69,9.16],[1.77,6.97],[6.87,-3.37],[4.68,-9.83],[2.56,-10.33],[-1.78,-7.64],[-6.88,2.7]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1252.269,442.73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.38,-1.17],[-1.17,2.38],[0,0],[2.38,1.17],[0.71,0],[0.83,-1.7],[0,0]],"o":[[2.38,1.18],[0,0],[1.18,-2.38],[-0.68,-0.34],[-1.78,0],[0,0],[-1.17,2.38]],"v":[[-4.69,9.15],[1.77,6.96],[6.87,-3.38],[4.68,-9.84],[2.56,-10.33],[-1.78,-7.65],[-6.88,2.69]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1261.239,447.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.43,-1.69],[0,0],[0,0],[-4.8,-1.65],[-0.55,-0.27]],"o":[[1.05,2.2],[7.18,3.54],[0,0],[0,0],[0.53,0.18],[0,0]],"v":[[-22.62,-4.995],[-16.25,1.455],[0.33,1.365],[12.2,-2.735],[21,-2.745],[22.62,-2.075]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1146.939,395.935],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-6.12,-3.02],[-0.98,-2.17]],"o":[[6.75,3.33],[0,0],[0,0],[3.83,1.89],[0,0]],"v":[[-22.615,2.16],[-12.835,3.55],[1.885,-1.23],[15.875,-2.47],[22.615,4.16]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1113.434,367.82],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.59,-1.77],[-3.02,0.29],[0,0],[0,0],[-2.4,0.68],[-3.3,-1.63],[0,0]],"o":[[1.01,2.27],[3.16,1.55],[3.86,-0.38],[0,0],[0,0],[2.81,-0.79],[8.02,3.96],[0,0]],"v":[[-31.685,-4.125],[-25.175,2.635],[-15.415,4.065],[-8.605,2.545],[9.675,-3.395],[13.755,-4.985],[23.665,-4.635],[31.405,6.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1139.724,386.795],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-7.17,-3.54],[-3.16,0.4],[0,0],[0,0],[-2.41,0.68],[-3.3,-1.63],[-0.94,-2.23]],"o":[[0,0],[3.41,1.68],[3.5,-0.44],[0,0],[0,0],[2.81,-0.79],[4.01,1.97],[0,0]],"v":[[-31.675,-6.3],[-24.045,4.55],[-13.555,5.9],[-7.475,4.46],[10.805,-1.48],[14.885,-3.06],[24.795,-2.71],[31.675,4.22]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1121.554,376.47],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.38,1.17],[-1.17,2.38],[0,0],[-2.38,-1.18],[0,-1.79],[0.34,-0.68],[0,0]],"o":[[-2.38,-1.17],[0,0],[1.17,-2.38],[1.7,0.83],[0,0.71],[0,0],[-1.17,2.38]],"v":[[-4.35,9.5],[-6.54,3.04],[-1.44,-7.3],[5.02,-9.49],[7.71,-5.15],[7.21,-3.03],[2.11,7.31]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[651.039,146.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.38,1.17],[-1.17,2.38],[0,0],[-2.38,-1.17],[0,-1.78],[0.34,-0.68],[0,0]],"o":[[-2.37,-1.18],[0,0],[1.18,-2.38],[1.7,0.84],[0,0.71],[0,0],[-1.17,2.38]],"v":[[-4.35,9.5],[-6.54,3.04],[-1.44,-7.3],[5.02,-9.5],[7.71,-5.16],[7.21,-3.04],[2.11,7.3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[642.069,141.61],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.38,1.18],[-1.17,2.38],[0,0],[-2.38,-1.17],[0,-1.79],[0.33,-0.68],[0,0]],"o":[[-2.38,-1.17],[0,0],[1.18,-2.38],[1.7,0.84],[0,0.71],[0,0],[-1.18,2.38]],"v":[[-4.34,9.49],[-6.54,3.03],[-1.44,-7.31],[5.02,-9.5],[7.71,-5.15],[7.22,-3.04],[2.12,7.3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[633.099,137.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.43,1.69],[0,0],[0,0],[5.49,2.71]],"o":[[-2.38,0.51],[-7.18,-3.54],[0,0],[0,0],[0,0]],"v":[[14.925,16.775],[5.935,15.645],[-4.085,2.445],[-8.065,-9.465],[-14.925,-17.335]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[746.184,195.025],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[6.12,3.02],[2.32,-0.54]],"o":[[-6.75,-3.33],[0,0],[0,0],[-3.83,-1.89],[0,0]],"v":[[14.56,17.625],[7.51,10.705],[2.34,-3.885],[-5.19,-15.735],[-14.56,-17.055]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[783.569,208.005],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.59,1.77],[1.61,2.58],[0,0],[0,0],[0.96,2.37],[3.25,1.6],[0,0]],"o":[[-2.42,0.58],[-3.15,-1.55],[-2.05,-3.3],[0,0],[0,0],[-1.09,-2.69],[-8.02,-3.95],[0,0]],"v":[[23.325,23.735],[14.005,22.675],[6.925,15.805],[3.985,9.475],[-2.425,-8.645],[-3.695,-12.955],[-9.955,-20.495],[-23.325,-19.995]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[754.254,195.955],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[7.18,3.54],[1.62,2.72],[0,0],[0,0],[0.96,2.37],[3.25,1.6],[2.34,-0.62]],"o":[[0,0],[-3.36,-1.66],[-1.83,-3.09],[0,0],[0,0],[-1.09,-2.69],[-4.01,-1.98],[0,0]],"v":[[23.455,20.255],[10.195,20.805],[2.805,13.415],[0.175,7.595],[-6.235,-10.515],[-7.505,-14.825],[-13.765,-22.365],[-23.455,-23.605]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[775.104,206.235],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.43,1.69],[0,0],[0,0],[5.49,2.71],[0,0],[-8.02,-3.95],[-1.09,-2.69],[0,0],[0,0],[-2.05,-3.3]],"o":[[-2.38,0.51],[-7.18,-3.54],[0,0],[0,0],[0,0],[0,0],[3.25,1.6],[0.96,2.37],[0,0],[0,0],[0,0]],"v":[[15.055,19.865],[6.065,18.735],[-3.955,5.535],[-7.935,-6.375],[-14.795,-14.245],[-15.125,-15.975],[-1.755,-16.475],[4.505,-8.935],[5.775,-4.625],[12.185,13.495],[15.125,19.825]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[746.054,191.935],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.59,1.77],[1.61,2.58],[0,0],[0,0],[0.96,2.37],[0,0],[-4.01,-1.98],[-1.09,-2.69],[0,0],[0,0],[-1.83,-3.09]],"o":[[-2.42,0.58],[-3.15,-1.55],[-2.05,-3.3],[0,0],[0,0],[0,0],[2.34,-0.62],[3.25,1.6],[0.96,2.37],[0,0],[0,0],[0,0]],"v":[[13.345,18.545],[4.025,17.485],[-3.055,10.615],[-5.995,4.285],[-12.405,-13.835],[-13.675,-18.145],[-12.585,-18.515],[-2.895,-17.275],[3.365,-9.735],[4.635,-5.425],[11.045,12.685],[13.675,18.505]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[764.234,201.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.75,-3.33],[0,0],[7.18,3.54],[1.62,2.72],[0,0],[0,0],[0.96,2.37],[0,0],[-3.83,-1.89],[0,0],[0,0]],"o":[[0,0],[0,0],[-3.36,-1.66],[-1.83,-3.09],[0,0],[0,0],[0,0],[2.32,-0.54],[6.12,3.02],[0,0],[0,0]],"v":[[15.05,15.15],[15.48,16.01],[2.22,16.56],[-5.17,9.17],[-7.8,3.35],[-14.21,-14.76],[-15.48,-19.07],[-14.07,-19.53],[-4.7,-18.21],[2.83,-6.36],[8,8.23]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[783.079,210.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.12,-3.02],[-0.98,-2.17],[0,0],[0,0],[0,0],[3.5,-0.44],[3.41,1.68],[0,0],[0,0],[0,0],[0,0]],"o":[[3.83,1.89],[0,0],[-2.41,0.68],[0,0],[0,0],[-3.16,0.4],[-7.17,-3.54],[0,0],[6.75,3.33],[0,0],[0,0]],"v":[[16.15,-7.2],[22.89,-0.57],[23.28,0.86],[19.2,2.44],[0.92,8.38],[-5.16,9.82],[-15.65,8.47],[-23.28,-2.38],[-22.34,-2.57],[-12.56,-1.18],[2.16,-5.96]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1113.158,372.55],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.3,-1.63],[-0.94,-2.23],[0,0],[0,0],[0,0],[3.86,-0.38],[3.16,1.55],[1.01,2.27],[0,0],[0,0],[0,0],[-2.41,0.68]],"o":[[4.01,1.97],[0,0],[-2.4,0.68],[0,0],[0,0],[-3.02,0.29],[-3.59,-1.77],[0,0],[3.5,-0.44],[0,0],[0,0],[2.81,-0.79]],"v":[[15.61,-7.88],[22.49,-0.95],[22.74,0.17],[18.66,1.76],[0.38,7.7],[-6.43,9.22],[-16.19,7.79],[-22.7,1.03],[-22.74,0.73],[-16.66,-0.71],[1.62,-6.65],[5.7,-8.23]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1130.739,381.64],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[7.18,3.54],[1.05,2.2],[0,0],[0,0],[0,0],[-2.4,0.68],[-3.3,-1.63],[0,0]],"o":[[-4.8,-1.65],[0,0],[0,0],[-3.43,-1.69],[0,0],[3.86,-0.38],[0,0],[0,0],[2.81,-0.79],[8.02,3.96],[0,0]],"v":[[20.08,2.46],[11.28,2.47],[-0.59,6.57],[-17.17,6.66],[-23.54,0.21],[-23.55,0.13],[-16.74,-1.39],[1.54,-7.33],[5.62,-8.92],[15.53,-8.57],[23.27,2.33]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1147.859,390.73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.68,-0.33],[1.17,-2.38],[0,0],[2.38,1.17],[-1.17,2.38],[0,0],[-1.78,0]],"o":[[2.38,1.18],[0,0],[-1.18,2.38],[-2.38,-1.18],[0,0],[0.84,-1.7],[0.71,0]],"v":[[4.68,-9.84],[6.88,-3.38],[1.78,6.96],[-4.68,9.16],[-6.88,2.7],[-1.78,-7.64],[2.57,-10.33]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1243.299,438.31],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":2,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.68,-0.34],[1.18,-2.38],[0,0],[2.38,1.17],[-1.17,2.38],[0,0],[-1.78,0]],"o":[[2.38,1.17],[0,0],[-1.17,2.38],[-2.37,-1.17],[0,0],[0.84,-1.7],[0.71,0]],"v":[[4.68,-9.83],[6.87,-3.37],[1.77,6.97],[-4.69,9.16],[-6.88,2.7],[-1.78,-7.64],[2.56,-10.33]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1252.269,442.73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":2,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.68,-0.34],[1.18,-2.38],[0,0],[2.38,1.18],[-1.17,2.38],[0,0],[-1.78,0]],"o":[[2.38,1.17],[0,0],[-1.17,2.38],[-2.38,-1.17],[0,0],[0.83,-1.7],[0.71,0]],"v":[[4.68,-9.84],[6.87,-3.38],[1.77,6.96],[-4.69,9.15],[-6.88,2.69],[-1.78,-7.65],[2.56,-10.33]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1261.239,447.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":2,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.38,-1.17],[0,-1.79],[0.33,-0.68],[0,0],[2.38,1.18],[-1.17,2.38],[0,0]],"o":[[1.7,0.84],[0,0.71],[0,0],[-1.18,2.38],[-2.38,-1.17],[0,0],[1.18,-2.38]],"v":[[5.02,-9.5],[7.71,-5.15],[7.22,-3.04],[2.12,7.3],[-4.34,9.49],[-6.54,3.03],[-1.44,-7.31]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[633.099,137.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":2,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.38,-1.17],[0,-1.78],[0.34,-0.68],[0,0],[2.38,1.17],[-1.17,2.38],[0,0]],"o":[[1.7,0.84],[0,0.71],[0,0],[-1.17,2.38],[-2.37,-1.18],[0,0],[1.18,-2.38]],"v":[[5.02,-9.5],[7.71,-5.16],[7.21,-3.04],[2.11,7.3],[-4.35,9.5],[-6.54,3.04],[-1.44,-7.3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[642.069,141.61],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":2,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.79],[0.34,-0.68],[0,0],[2.38,1.17],[-1.17,2.38],[0,0],[-2.38,-1.18]],"o":[[0,0.71],[0,0],[-1.17,2.38],[-2.38,-1.17],[0,0],[1.17,-2.38],[1.7,0.83]],"v":[[7.71,-5.15],[7.21,-3.03],[2.11,7.31],[-4.35,9.5],[-6.54,3.04],[-1.44,-7.3],[5.02,-9.49]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[651.039,146.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":2,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.35,-2.74],[-2.74,-1.35],[-1.35,2.74],[2.74,1.35]],"o":[[-1.35,2.74],[2.73,1.35],[1.35,-2.73],[-2.74,-1.35]],"v":[[-4.96,-2.45],[-2.44,4.96],[4.96,2.44],[2.45,-4.96]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1351.868,491.52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":2,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.06,-0.18],[-2.21,-1.09],[-1.17,2.38],[0,0],[2.38,1.17],[0.71,0],[0.91,-1.33],[0.1,-0.21],[0,0]],"o":[[-0.81,2.27],[2.38,1.18],[0,0],[1.17,-2.38],[-0.68,-0.34],[-1.56,0],[-0.13,0.19],[0,0],[-0.09,0.17]],"v":[[-7.165,3.21],[-4.755,9.15],[1.705,6.96],[6.805,-3.38],[4.615,-9.84],[2.495,-10.33],[-1.495,-8.25],[-1.845,-7.65],[-6.945,2.69]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1342.024,486.97],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":2,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.35,-2.74],[2.74,1.35],[-1.36,2.74],[-2.74,-1.35]],"o":[[-1.35,2.74],[-2.74,-1.35],[1.35,-2.74],[2.74,1.35]],"v":[[4.96,2.445],[-2.44,4.955],[-4.95,-2.445],[2.45,-4.955]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[542.799,92.485],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":2,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.22,-0.27],[2.06,1.02],[-1.18,2.38],[0,0],[-2.38,-1.17],[0,-1.78],[0.19,-0.52],[0.09,-0.17],[0,0]],"o":[[-1.38,1.73],[-2.38,-1.17],[0,0],[1.17,-2.38],[1.7,0.83],[0,0.53],[-0.06,0.18],[0,0],[-0.16,0.32]],"v":[[1.56,8.26],[-4.34,9.57],[-6.53,3.11],[-1.43,-7.23],[5.03,-9.42],[7.71,-5.08],[7.44,-3.48],[7.22,-2.96],[2.12,7.38]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[552.379,97.3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":2,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-389.02,-191.87],[389.02,191.87]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[944.129,297.44],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":2,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-389.025,-191.87],[389.025,191.87]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[949.884,285.78],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":2,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.06,-0.18],[0,0],[0,0],[0,0],[-0.16,0.32],[0,0],[-0.06,0.18],[0,0],[0,0],[0,0],[0.1,-0.21]],"o":[[-0.09,0.17],[0,0],[0,0],[0,0],[0.22,-0.27],[0,0],[0.09,-0.17],[0,0],[0,0],[0,0],[-0.13,0.19],[0,0]],"v":[[387.845,197.66],[387.625,198.18],[385.915,197.31],[-392.125,-186.43],[-393.295,-186.44],[-392.735,-187.32],[-387.635,-197.66],[-387.415,-198.18],[-386.375,-198.09],[391.675,185.65],[393.295,186.72],[392.945,187.32]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.234,292],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":2,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.68,-0.34],[1.17,-2.38],[0,0],[2.38,1.18],[-0.81,2.27],[-0.09,0.17],[0,0],[-0.13,0.19],[-1.56,0]],"o":[[2.38,1.17],[0,0],[-1.17,2.38],[-2.21,-1.09],[0.06,-0.18],[0,0],[0.1,-0.21],[0.91,-1.33],[0.71,0]],"v":[[4.615,-9.84],[6.805,-3.38],[1.705,6.96],[-4.755,9.15],[-7.165,3.21],[-6.945,2.69],[-1.845,-7.65],[-1.495,-8.25],[2.495,-10.33]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1342.024,486.97],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":2,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.74,-1.35],[1.35,-2.73],[2.73,1.35],[-1.35,2.74]],"o":[[2.74,1.35],[-1.35,2.74],[-2.74,-1.35],[1.35,-2.74]],"v":[[2.45,-4.96],[4.96,2.44],[-2.44,4.96],[-4.96,-2.45]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1351.869,491.52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":2,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.74,-1.35],[1.35,-2.74],[2.74,1.35],[-1.36,2.74]],"o":[[2.74,1.35],[-1.35,2.74],[-2.74,-1.35],[1.35,-2.74]],"v":[[2.45,-4.955],[4.96,2.445],[-2.44,4.955],[-4.95,-2.445]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[542.799,92.485],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":2,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.78],[0.19,-0.52],[0.09,-0.17],[0,0],[0.22,-0.27],[2.06,1.02],[-1.18,2.38],[0,0],[-2.38,-1.17]],"o":[[0,0.53],[-0.06,0.18],[0,0],[-0.16,0.32],[-1.38,1.73],[-2.38,-1.17],[0,0],[1.17,-2.38],[1.7,0.83]],"v":[[7.71,-5.08],[7.44,-3.48],[7.22,-2.96],[2.12,7.38],[1.56,8.26],[-4.34,9.57],[-6.53,3.11],[-1.43,-7.23],[5.03,-9.42]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[552.379,97.3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":2,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":7,"ty":3,"nm":"side 2 seat PEG","parent":4,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[-1.292]},"o":{"x":[0.333],"y":[2.292]},"t":-108,"s":[-0.098]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0.647]},"t":0,"s":[-0.098]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":149,"s":[0]},{"t":186,"s":[5]}],"ix":10},"p":{"a":0,"k":[51,178,0],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"side 2 tassle PEG","parent":7,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[-7.333]},"o":{"x":[0.333],"y":[8.333]},"t":-108,"s":[-0.741]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0.625]},"t":0,"s":[-0.741]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":152,"s":[0]},{"t":189,"s":[10]}],"ix":10},"p":{"a":0,"k":[49,348,0],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":3,"nm":"earth PEG","parent":7,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[-3.167]},"o":{"x":[0.333],"y":[4.167]},"t":-108,"s":[-0.37]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0.625]},"t":0,"s":[-0.37]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":152,"s":[0]},{"t":189,"s":[5]}],"ix":10},"p":{"a":0,"k":[49,348,0],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"side 2 seat Outlines","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-233.124,24.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.848],[5.848,0],[0,5.848],[-5.848,0]],"o":[[0,5.848],[-5.848,0],[0,-5.848],[5.848,0]],"v":[[10.588,0],[0,10.588],[-10.588,0],[0,-10.588]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.651,569.013],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-9.454],[9.454,0],[0,9.454],[-9.453,0]],"o":[[0,9.454],[-9.453,0],[0,-9.454],[9.454,0]],"v":[[17.118,0],[0,17.118],[-17.118,0],[0,-17.118]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.65,569.013],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.882,0],[0,0],[0,3.883],[-3.882,0],[0,0],[0,-3.882]],"o":[[0,0],[-3.882,0],[0,-3.882],[0,0],[3.882,0],[0,3.883]],"v":[[116.5,7.059],[-116.5,7.059],[-123.559,0],[-116.5,-7.059],[116.5,-7.059],[123.559,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1248.739,823.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[83.647,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-83.647,0],[0,0]],"v":[[115.883,-17.824],[0.118,17.823],[-0.117,17.823],[-115.882,-17.824]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1248.739,848.278],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.97,1.6],[3.97,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1253.028,567.648],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.71,1.495],[3.71,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1263.628,595.983],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.975,1.6],[3.975,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1275.623,623.748],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.71,1.495],[3.71,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1286.228,652.083],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.97,1.6],[3.97,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1298.218,679.858],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.71,1.495],[3.71,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1308.818,708.183],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.97,1.6],[3.97,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1320.808,735.958],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.71,1.495],[3.71,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1331.408,764.293],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.975,1.6],[3.975,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1343.403,792.058],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.715,1.495],[3.715,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1354.003,820.393],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-52.44,-130.225],[-51.17,-127.075],[-39.88,-99.025],[-28.58,-70.975],[-17.28,-42.925],[-5.99,-14.865],[5.31,13.175],[16.6,41.235],[27.9,69.285],[39.2,97.335],[50.49,125.395],[52.44,130.225]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1308.528,692.984],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-52.13,-129.455],[-51.02,-126.695],[-39.72,-98.645],[-28.43,-70.595],[-17.13,-42.535],[-5.83,-14.485],[5.46,13.565],[16.76,41.615],[28.06,69.675],[39.35,97.715],[50.65,125.765],[52.13,129.455]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1299.208,696.293],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.06,-15.87],[10.23,12.18],[8.92,12.71],[1.5,15.7],[1.07,15.87],[-10.23,-12.18],[-9.36,-12.53],[-1.42,-15.73]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1258.418,581.778],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.07,-15.87],[10.23,12.18],[9.88,12.32],[1.93,15.52],[1.06,15.87],[-10.23,-12.18],[-9.8,-12.35],[-2.38,-15.34]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1269.718,609.828],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.235,12.175],[8.925,12.705],[1.505,15.695],[1.065,15.875],[-10.235,-12.185],[-9.365,-12.535],[-1.415,-15.735],[-1.065,-15.875]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1281.013,637.883],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.06,-15.875],[10.23,12.185],[9.88,12.325],[1.94,15.525],[1.07,15.875],[-10.23,-12.175],[-9.79,-12.355],[-2.37,-15.345]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1292.308,665.933],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.23,12.17],[8.92,12.7],[1.5,15.69],[1.06,15.87],[-10.23,-12.18],[-9.36,-12.53],[-1.42,-15.73],[-1.07,-15.87]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1303.608,693.988],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":2,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.06,-15.875],[10.23,12.185],[9.88,12.325],[1.94,15.525],[1.07,15.875],[-10.23,-12.175],[-9.79,-12.355],[-2.37,-15.345]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1314.898,722.033],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":2,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.07,-15.875],[10.23,12.175],[8.92,12.705],[1.5,15.695],[1.07,15.875],[-10.23,-12.185],[-9.36,-12.535],[-1.42,-15.735]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1326.198,750.093],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":2,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.23,12.18],[9.88,12.32],[1.93,15.52],[1.06,15.87],[-10.23,-12.17],[-9.8,-12.35],[-2.38,-15.34],[-1.07,-15.87]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1337.498,778.138],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":2,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.06,-15.87],[10.23,12.19],[8.93,12.71],[1.5,15.7],[1.07,15.87],[-10.23,-12.18],[-9.36,-12.53],[-1.41,-15.73]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1348.788,806.188],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":2,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.935,-1.68],[3.935,1.68]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1247.27,567.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":2,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.57],[3.68,1.57]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1234.735,595.448],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":2,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.94,-1.675],[3.94,1.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1223.575,623.563],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":2,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.565],[3.68,1.565]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1211.035,651.093],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":2,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.935,-1.675],[3.935,1.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1199.88,679.213],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":2,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.565],[3.68,1.565]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1187.345,706.743],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":2,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.94,-1.68],[3.94,1.68]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1176.185,734.858],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":2,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.57],[3.68,1.57]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1163.645,762.388],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":2,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.935,-1.675],[3.935,1.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1152.49,790.503],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":2,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.565],[3.68,1.565]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1139.955,818.033],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":2,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[54.755,-128.6],[53.605,-125.89],[41.755,-98.07],[29.915,-70.25],[18.065,-42.43],[6.215,-14.6],[-5.625,13.22],[-17.475,41.05],[-29.325,68.87],[-41.165,96.69],[-53.015,124.51],[-54.755,128.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1197.95,695.638],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":2,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[55.265,-129.795],[53.865,-126.505],[42.015,-98.685],[30.165,-70.855],[18.325,-43.025],[6.475,-15.205],[-5.375,12.615],[-17.215,40.435],[-29.065,68.265],[-40.915,96.085],[-52.755,123.915],[-55.265,129.795]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1188.6,692.373],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":2,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.975],[-1.38,15.845],[-2.68,15.295],[-10.04,12.165],[-10.47,11.985],[1.37,-15.845],[2.24,-15.475],[10.11,-12.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1146.315,804.303],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":2,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.975],[-1.37,15.845],[-1.73,15.695],[-9.6,12.345],[-10.47,11.975],[1.38,-15.845],[1.81,-15.665],[9.17,-12.525]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1158.155,776.483],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":2,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.97],[-1.38,15.85],[-2.68,15.3],[-10.04,12.16],[-10.47,11.98],[1.38,-15.85],[2.24,-15.48],[10.12,-12.12]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1170.005,748.658],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":2,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.98],[-1.38,15.85],[-1.73,15.7],[-9.61,12.34],[-10.47,11.97],[1.37,-15.85],[1.81,-15.66],[9.17,-12.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1181.855,720.838],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":2,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.975],[-1.37,15.845],[-2.67,15.295],[-10.03,12.165],[-10.47,11.975],[1.38,-15.845],[2.25,-15.475],[10.12,-12.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1193.695,693.013],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 42","np":2,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.985],[-1.38,15.845],[-1.73,15.695],[-9.6,12.345],[-10.47,11.975],[1.38,-15.845],[1.81,-15.665],[9.17,-12.535]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1205.545,665.193],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 43","np":2,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.975],[-1.38,15.845],[-2.68,15.295],[-10.04,12.165],[-10.47,11.985],[1.37,-15.845],[2.24,-15.475],[10.12,-12.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1217.395,637.363],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 44","np":2,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.97],[-1.37,15.85],[-1.72,15.7],[-9.6,12.35],[-10.47,11.98],[1.38,-15.85],[1.82,-15.66],[9.18,-12.52]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1229.235,609.538],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 45","np":2,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.97],[-1.38,15.85],[-2.67,15.3],[-10.03,12.16],[-10.47,11.97],[1.38,-15.85],[2.25,-15.48],[10.12,-12.12]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1241.085,581.718],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 46","np":2,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"side 2 tassle Outlines","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-232.124,-273.08,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.848],[5.848,0],[0,5.848],[-5.848,0]],"o":[[0,5.848],[-5.848,0],[0,-5.848],[5.848,0]],"v":[[10.588,0],[0,10.588],[-10.588,0],[0,-10.588]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1247.739,865.395],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.946,-7.787]],"o":[[0.728,9.497],[0,0]],"v":[[-3.822,-13.648],[3.822,13.648]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1253.681,891.397],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.946,-7.787]],"o":[[-0.728,9.497],[0,0]],"v":[[3.822,-13.648],[-3.822,13.648]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1242.152,891.397],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-9.048,-6.127],[0,0],[-0.353,10.507]],"o":[[-0.307,10.923],[-20.371,15.529],[8.993,-5.446],[0,0]],"v":[[6.009,-20.823],[19.991,5.295],[-19.991,5.295],[-5.285,-19.764]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1247.671,895.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":12,"ty":0,"nm":"Earth","parent":9,"refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-231.654,-272.69,0],"ix":2,"l":2},"a":{"a":0,"k":[966,543.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"side 2 base string Outlines","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-232.124,152.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.15,0.05],[-2.42,-1.92]],"o":[[0.14,-0.06],[2.97,-1],[0,0]],"v":[[-4.825,-0.01],[-4.385,-0.17],[4.825,1.17]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1247.62,447.638],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.095,476.903],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1248.515,507.148],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.445,537.383],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1248.865,567.628],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.355,-61.96],[-0.195,-33.94],[-0.025,-3.7],[0.155,26.54],[0.325,56.78],[0.355,61.96]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1253.95,510.818],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.36,-62.7],[-0.19,-33.28],[-0.02,-3.05],[0.16,27.2],[0.33,57.43],[0.36,62.7]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1244.065,510.218],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.42,-1.92]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[2.97,-1],[0,0]],"v":[[5.1,-12.845],[5.26,15.175],[4.88,15.175],[-3.68,15.225],[-4.62,15.235],[-4.79,-14.185],[-5.26,-14.235],[3.95,-12.895]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1248.495,461.703],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.145],[5.025,15.095],[3.615,15.105],[-4.385,15.145],[-4.855,15.145],[-5.025,-15.085],[-4.085,-15.095],[4.475,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1248.9,492.023],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.85,-15.15],[5.03,15.09],[4.65,15.09],[-3.91,15.14],[-4.85,15.15],[-5.03,-15.1],[-4.56,-15.1],[3.44,-15.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.075,522.268],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.145],[5.025,15.095],[3.615,15.105],[-4.385,15.145],[-4.855,15.145],[-5.025,-15.085],[-4.085,-15.095],[4.475,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.25,552.503],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[3.29,-0.07],[0,0],[0,0],[0,0]],"o":[[0,0],[-3.29,-0.04],[0,0],[0,0],[0,0],[0,0]],"v":[[4.925,-2.66],[4.955,2.52],[-4.925,2.66],[-4.955,-2.61],[-4.485,-2.61],[3.515,-2.65]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.35,570.258],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"side 2 string ul Outlines","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-233.124,24.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.285,0.025],[4.285,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.79,597.863],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.215,628.108],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.135,658.343],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.555,688.588],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.485,718.823],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.905,749.068],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.835,779.303],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.255,809.548],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.725,-126.255],[-0.595,-104.335],[-0.425,-74.095],[-0.255,-43.855],[-0.075,-13.615],[0.095,16.625],[0.265,46.865],[0.445,77.105],[0.615,107.345],[0.725,126.255]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1255.05,702.173],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.73,-126.625],[-0.6,-104.165],[-0.43,-73.935],[-0.25,-43.685],[-0.08,-13.455],[0.1,16.795],[0.27,47.025],[0.45,77.275],[0.62,107.505],[0.73,126.625]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1245.165,702.063],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.86,-15.145],[5.03,15.095],[3.62,15.105],[-4.38,15.145],[-4.86,15.145],[-5.03,-15.085],[-4.09,-15.095],[4.48,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.595,612.983],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.86,-15.15],[5.03,15.09],[4.65,15.09],[-3.91,15.14],[-4.85,15.15],[-5.03,-15.1],[-4.55,-15.1],[3.45,-15.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.765,643.228],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.85,-15.145],[5.03,15.095],[3.61,15.105],[-4.39,15.145],[-4.86,15.145],[-5.03,-15.085],[-4.09,-15.095],[4.47,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.945,673.463],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.86,-15.15],[5.03,15.09],[4.65,15.09],[-3.91,15.14],[-4.85,15.15],[-5.03,-15.1],[-4.56,-15.1],[3.44,-15.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.115,703.708],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.145],[5.025,15.095],[3.615,15.105],[-4.385,15.145],[-4.855,15.145],[-5.025,-15.085],[-4.085,-15.095],[4.475,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.29,733.943],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.85,-15.15],[5.03,15.09],[4.65,15.09],[-3.91,15.14],[-4.85,15.15],[-5.03,-15.1],[-4.56,-15.1],[3.44,-15.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.465,764.188],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.145],[5.025,15.095],[3.615,15.105],[-4.385,15.145],[-4.855,15.145],[-5.025,-15.085],[-4.085,-15.095],[4.475,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.64,794.423],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.61,-0.04],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.69,-0.15]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[2.69,0.1],[0.61,0.03]],"v":[[4.88,-10.75],[5.01,11.17],[4.63,11.17],[-3.94,11.22],[-4.88,11.23],[-5.01,-11.23],[3.05,-10.86]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1249.445,586.668],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":15,"ty":3,"nm":"side 1 seat PEG","parent":5,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0.647]},"t":0,"s":[-0.098]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[-5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":149,"s":[0]},{"t":186,"s":[5]}],"ix":10},"p":{"a":0,"k":[50,177,0],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":3,"nm":"side 1 tassle PEG","parent":15,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0.625]},"t":0,"s":[-0.741]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":152,"s":[0]},{"t":189,"s":[10]}],"ix":10},"p":{"a":0,"k":[49,347,0],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":3,"nm":"gold bars 1 PEG","parent":15,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0.571},"t":0,"s":[38.814,264,0],"to":[2.049,0,0],"ti":[-2.864,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[44,264,0],"to":[2.864,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":49,"s":[56,264,0],"to":[0,0,0],"ti":[5.333,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":85,"s":[44,264,0],"to":[-5.333,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":122,"s":[24,264,0],"to":[0,0,0],"ti":[-1.294,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[44,264,0],"to":[5.333,0,0],"ti":[-2,0,0]},{"t":195,"s":[56,264,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":3,"nm":"gold bars 2 PEG","parent":15,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0.598},"t":0,"s":[40.864,283,0],"to":[1.215,0,0],"ti":[-2.523,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[44,283,0],"to":[2.523,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":46,"s":[56,283,0],"to":[0,0,0],"ti":[5.333,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":82,"s":[44,283,0],"to":[-5.333,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":119,"s":[24,283,0],"to":[0,0,0],"ti":[-0.843,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":155,"s":[44,283,0],"to":[5.333,0,0],"ti":[-2,0,0]},{"t":192,"s":[56,283,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":3,"nm":"gold bars 3 PEG","parent":15,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0.587},"t":0,"s":[42.514,297,0],"to":[0.549,0,0],"ti":[-2.248,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[44,297,0],"to":[2.248,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":43,"s":[56,297,0],"to":[0,0,0],"ti":[5.333,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":79,"s":[44,297,0],"to":[-5.333,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[24,297,0],"to":[0,0,0],"ti":[-0.437,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":152,"s":[44,297,0],"to":[5.333,0,0],"ti":[-2,0,0]},{"t":189,"s":[56,297,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"side 1 seat Outlines","parent":15,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[375.876,323.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.848],[5.847,0],[0,5.848],[-5.848,0]],"o":[[0,5.848],[-5.848,0],[0,-5.848],[5.847,0]],"v":[[10.589,0],[0,10.588],[-10.589,0],[0,-10.588]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[640.533,269.156],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-9.454],[9.454,0],[0,9.454],[-9.453,0]],"o":[[0,9.454],[-9.453,0],[0,-9.454],[9.454,0]],"v":[[17.118,0],[0,17.118],[-17.117,0],[0,-17.118]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[640.533,269.156],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.882,0],[0,0],[0,3.883],[-3.882,0],[0,0],[0,-3.882]],"o":[[0,0],[-3.882,0],[0,-3.882],[0,0],[3.882,0],[0,3.883]],"v":[[116.5,7.059],[-116.5,7.059],[-123.559,0],[-116.5,-7.059],[116.5,-7.059],[123.559,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[639.622,523.185],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[83.647,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-83.647,0],[0,0]],"v":[[115.883,-17.823],[0.117,17.824],[-0.117,17.824],[-115.883,-17.823]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[639.622,548.421],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.97,1.6],[3.97,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[643.912,267.79],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.71,1.495],[3.71,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[654.512,296.125],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.975,1.595],[3.975,-1.595]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[666.507,323.895],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.715,1.495],[3.715,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[677.106,352.225],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.97,1.6],[3.97,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[689.102,380],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.71,1.49],[3.71,-1.49]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[699.702,408.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.97,1.6],[3.97,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[711.692,436.1],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.71,1.495],[3.71,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[722.292,464.435],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.975,1.6],[3.975,-1.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[734.287,492.2],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.715,1.495],[3.715,-1.495]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[744.887,520.535],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-52.44,-130.22],[-51.18,-127.08],[-39.88,-99.03],[-28.58,-70.97],[-17.29,-42.93],[-5.99,-14.87],[5.31,13.18],[16.6,41.23],[27.9,69.28],[39.2,97.33],[50.49,125.39],[52.44,130.22]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[699.412,393.13],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-52.13,-129.455],[-51.02,-126.695],[-39.72,-98.645],[-28.43,-70.595],[-17.13,-42.545],[-5.83,-14.485],[5.46,13.565],[16.76,41.615],[28.06,69.675],[39.35,97.715],[50.65,125.765],[52.13,129.455]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[690.091,396.435],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.07,-15.87],[10.23,12.18],[8.92,12.71],[1.5,15.7],[1.07,15.87],[-10.23,-12.18],[-9.36,-12.53],[-1.42,-15.73]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[649.302,281.92],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.07,-15.87],[10.23,12.19],[9.88,12.33],[1.93,15.52],[1.06,15.87],[-10.23,-12.18],[-9.8,-12.35],[-2.38,-15.34]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[660.602,309.97],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.06,-15.865],[10.23,12.175],[8.93,12.705],[1.5,15.695],[1.07,15.865],[-10.23,-12.185],[-9.36,-12.535],[-1.41,-15.725]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[671.891,338.025],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.07,-15.875],[10.23,12.185],[9.88,12.325],[1.94,15.525],[1.07,15.875],[-10.23,-12.185],[-9.8,-12.355],[-2.37,-15.345]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[683.192,366.075],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.07,-15.87],[10.23,12.18],[8.92,12.71],[1.5,15.69],[1.06,15.87],[-10.23,-12.18],[-9.36,-12.53],[-1.42,-15.73]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[694.492,394.13],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":2,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.06,-15.87],[10.23,12.18],[9.88,12.32],[1.94,15.52],[1.07,15.87],[-10.23,-12.18],[-9.79,-12.36],[-2.37,-15.34]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[705.782,422.18],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":2,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.07,-15.875],[10.23,12.175],[8.92,12.705],[1.5,15.695],[1.07,15.875],[-10.23,-12.185],[-9.36,-12.535],[-1.42,-15.735]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[717.081,450.235],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":2,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.23,12.18],[9.88,12.32],[1.93,15.52],[1.06,15.87],[-10.23,-12.17],[-9.8,-12.35],[-2.38,-15.34],[-1.07,-15.87]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[728.382,478.28],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":2,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.06,-15.87],[10.23,12.19],[8.93,12.71],[1.5,15.7],[1.07,15.87],[-10.23,-12.18],[-9.36,-12.53],[-1.41,-15.73]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[739.672,506.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":2,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.935,-1.68],[3.935,1.68]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[638.154,268.06],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":2,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.57],[3.68,1.57]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[625.619,295.59],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":2,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.94,-1.68],[3.94,1.68]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[614.459,323.71],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":2,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.565],[3.68,1.565]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[601.919,351.235],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":2,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.935,-1.675],[3.935,1.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[590.764,379.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":2,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.565],[3.68,1.565]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[578.229,406.885],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":2,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.94,-1.68],[3.94,1.68]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[567.069,435],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":2,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.57],[3.68,1.57]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[554.529,462.53],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":2,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.935,-1.68],[3.935,1.68]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[543.374,490.65],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":2,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-3.68,-1.565],[3.68,1.565]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[530.839,518.175],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":2,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[54.755,-128.6],[53.605,-125.89],[41.755,-98.07],[29.905,-70.24],[18.065,-42.43],[6.215,-14.6],[-5.625,13.22],[-17.475,41.05],[-29.325,68.87],[-41.175,96.7],[-53.015,124.51],[-54.755,128.6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[588.834,395.78],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":2,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[55.265,-129.795],[53.865,-126.505],[42.015,-98.685],[30.165,-70.855],[18.325,-43.025],[6.475,-15.205],[-5.375,12.615],[-17.215,40.435],[-29.065,68.265],[-40.915,96.085],[-52.755,123.915],[-55.265,129.795]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[579.484,392.515],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":2,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.465,-11.965],[-1.375,15.845],[-2.675,15.295],[-10.035,12.165],[-10.465,11.985],[1.375,-15.845],[2.245,-15.475],[10.115,-12.115]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[537.194,504.445],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":2,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.98],[-1.38,15.85],[-1.73,15.7],[-9.6,12.34],[-10.47,11.97],[1.38,-15.85],[1.81,-15.67],[9.17,-12.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[549.039,476.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":2,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.97],[-1.38,15.85],[-2.68,15.3],[-10.04,12.16],[-10.47,11.98],[1.38,-15.85],[2.24,-15.48],[10.12,-12.12]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[560.889,448.8],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":2,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.98],[-1.38,15.85],[-1.73,15.7],[-9.61,12.34],[-10.47,11.97],[1.37,-15.85],[1.81,-15.66],[9.17,-12.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[572.739,420.98],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":2,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.975],[-1.37,15.845],[-2.67,15.295],[-10.03,12.165],[-10.47,11.975],[1.38,-15.845],[2.25,-15.475],[10.12,-12.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[584.579,393.155],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 42","np":2,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.985],[-1.38,15.845],[-1.73,15.695],[-9.6,12.345],[-10.47,11.975],[1.38,-15.845],[1.81,-15.665],[9.17,-12.535]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[596.429,365.335],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 43","np":2,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.465,-11.965],[-1.375,15.845],[-2.675,15.295],[-10.035,12.165],[-10.465,11.985],[1.375,-15.845],[2.245,-15.475],[10.125,-12.115]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[608.274,337.505],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 44","np":2,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.975],[-1.38,15.855],[-1.72,15.705],[-9.6,12.345],[-10.47,11.975],[1.38,-15.855],[1.82,-15.665],[9.18,-12.525]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[620.119,309.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 45","np":2,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[10.47,-11.97],[-1.38,15.85],[-2.67,15.3],[-10.03,12.16],[-10.47,11.97],[1.38,-15.85],[2.25,-15.48],[10.12,-12.12]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[631.969,281.86],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 46","np":2,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"side 1 tassle Outlines","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[376.876,26.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.848],[5.848,0],[0,5.848],[-5.848,0]],"o":[[0,5.848],[-5.848,0],[0,-5.848],[5.848,0]],"v":[[10.588,0],[0,10.588],[-10.588,0],[0,-10.588]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[639.622,565.538],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.946,-7.787]],"o":[[0.728,9.497],[0,0]],"v":[[-3.822,-13.648],[3.822,13.648]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[645.564,591.54],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.946,-7.787]],"o":[[-0.728,9.497],[0,0]],"v":[[3.822,-13.648],[-3.822,13.648]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[634.035,591.54],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-9.048,-6.127],[0,0],[-0.353,10.507]],"o":[[-0.307,10.923],[-20.371,15.529],[8.993,-5.446],[0,0]],"v":[[6.009,-20.823],[19.991,5.295],[-19.991,5.295],[-5.285,-19.764]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[639.554,595.185],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"gold bars 1 Outlines","parent":17,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[381.876,109.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[603.329,482.95],[609.889,482.95],[627.589,482.95],[638.619,482.95],[647.479,482.95],[686.979,482.95]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[4.055,9.265],[4.005,9.145],[-4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[683.564,473.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[4.055,9.265],[4.005,9.145],[-4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[634.564,473.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-4.055,9.265],[-4.005,9.145],[4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[606.564,473.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[610.979,463.89],[630.509,463.89],[679.449,463.89]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[9.945,-8.94],[18.005,9.47],[7.385,9.47],[-18.005,9.47],[-9.945,-8.94],[-9.585,-9.47],[9.945,-9.47]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[620.564,473.36],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[20.47,-8.94],[28.53,9.47],[-19.24,9.47],[-20.47,9.47],[-28.53,-8.94],[-28.53,-9.47],[20.41,-9.47]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.894117706897,0.36862745098,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[659.039,473.36],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"gold bars 2 Outlines","parent":18,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[381.876,90.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[582.709,501.89],[618.009,501.89],[619.479,501.89],[620.299,501.89],[646.389,501.89]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.06,9.265],[-4.06,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[613.949,492.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.06,9.265],[4.06,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[585.949,492.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[646.389,501.89],[655.589,501.89],[703.949,501.89]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.055,9.265],[-4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[700.534,492.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.055,9.265],[-4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[651.534,492.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.055,9.265],[4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[623.534,492.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[590.359,482.83],[696.419,482.83]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.85,-9.47],[8.85,-9.06],[0.74,9.47],[-0.73,9.47],[-8.85,-9.06],[-8.85,-9.47]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.894117706897,0.737254901961,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[618.739,492.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[9.945,-9.06],[18.055,9.47],[8.855,9.47],[-17.235,9.47],[-18.055,9.47],[-9.945,-9.06],[-9.945,-9.47],[1.085,-9.47],[9.945,-9.47]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[637.534,492.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-40.36,-9.795],[-14.97,-9.795],[-4.35,-9.795],[-4.3,-9.675],[-15.33,-9.675],[-33.03,-9.675],[-33.03,-9.265],[-24.91,9.265],[-23.44,9.265],[-22.62,9.265],[3.47,9.265],[12.67,9.265],[61.03,9.265],[61.03,9.795],[34.47,9.795],[22.53,9.795],[3,9.795],[2.64,9.795],[-3.12,9.795],[-14.47,9.795],[-34,9.795],[-34.36,9.795],[-52.06,9.795],[-61.03,9.795],[-61.03,9.265],[-52.91,-9.265],[-52.56,-9.795]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[642.919,492.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-24.1,-9.675],[-32.96,-9.675],[-33.01,-9.795],[-31.78,-9.795],[15.99,-9.795],[24.84,-9.795],[24.9,-9.265],[33.01,9.265],[33.01,9.795],[32.37,9.795],[32.37,9.265],[-15.99,9.265],[-24.1,-9.265]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.894117706897,0.36862745098,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[671.579,492.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"gold bars 3 Outlines","parent":19,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[381.876,76.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[638.269,521.48],[647.329,521.48],[673.559,521.48],[684.919,521.48],[721.919,521.48]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[4.055,9.265],[3.955,9.025],[-4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[718.504,512.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.055,9.265],[-4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[669.504,512.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.055,9.265],[4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[641.504,512.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[645.919,502.42],[665.449,502.42],[677.389,502.42],[703.949,502.42],[704.589,502.42],[714.389,502.42]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[563.679,521.48],[598.979,521.48],[600.449,521.48],[601.269,521.48],[636.559,521.48],[637.449,521.48],[638.269,521.48]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.06,9.265],[-4.06,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[594.919,512.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-4.06,9.265],[-3.93,8.965],[4.06,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[566.919,512.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[571.329,502.42],[581.889,502.42],[590.859,502.42],[608.559,502.42],[608.919,502.42],[628.449,502.42],[639.799,502.42]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[4.055,9.265],[-4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[632.504,512.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.055,9.265],[4.055,-9.265]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[604.504,512.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[639.799,502.42],[645.559,502.42],[645.919,502.42]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[9.875,-9],[17.995,9.53],[-17.305,9.53],[-17.995,9.23],[-10.005,-9],[-9.655,-9.53],[0.905,-9.53],[9.875,-9.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[580.984,511.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.85,-9.53],[8.85,-9],[0.74,9.53],[-0.73,9.53],[-8.85,-9],[-8.85,-9.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.894117706897,0.737254901961,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[599.709,511.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[9.945,-9],[18.055,9.53],[-17.235,9.53],[-18.055,9.53],[-9.945,-9],[-9.945,-9.53],[-9.585,-9.53],[9.945,-9.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[618.504,511.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[8.555,-9.53],[8.555,-9],[0.445,9.53],[-0.445,9.53],[-8.555,-9],[-8.555,-9.53],[2.795,-9.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.894117706897,0.737254901961,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[637.004,511.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[9.945,-9],[18.055,9.53],[-8.175,9.53],[-17.235,9.53],[-18.055,9.53],[-9.945,-9],[-9.945,-9.53],[-9.585,-9.53],[9.945,-9.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.839215746113,0.027450982262,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[655.504,511.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.505,9.29],[27.965,9.53],[-9.035,9.53],[-20.395,9.53],[-28.505,-9],[-28.505,-9.53],[-16.565,-9.53],[9.995,-9.53],[10.635,-9.53],[20.435,-9.53],[20.495,-9]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.894117706897,0.36862745098,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[693.954,511.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"side 1 base string Outlines","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[375.876,450.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.15,0.05],[-2.42,-1.92]],"o":[[0.14,-0.06],[2.97,-0.99],[0,0]],"v":[[-4.825,-0.015],[-4.385,-0.175],[4.825,1.165]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[638.504,147.785],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[639.979,177.045],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[639.399,207.29],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[640.329,237.525],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[639.749,267.77],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.108,-39.675]],"o":[[-0.21,40.48],[0,0]],"v":[[-0.79,-59.578],[-0.108,59.578]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[645.269,208.577],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.988,-39.64]],"o":[[-0.32,39.82],[0,0]],"v":[[-0.68,-60.23],[0.012,60.23]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[635.269,207.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.945,0.958],[4.934,-0.958],[3.524,-0.947],[-4.476,-0.907],[-4.946,-0.907],[-4.936,0.958]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[640.224,268.698],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.145],[5.025,15.095],[3.615,15.105],[-4.385,15.145],[-4.855,15.145],[-5.025,-15.085],[-4.085,-15.095],[4.475,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[640.134,252.645],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.145],[5.025,15.095],[3.615,15.105],[-4.385,15.145],[-4.855,15.145],[-5.025,-15.085],[-4.085,-15.095],[4.475,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[639.784,192.165],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.85,-15.15],[5.03,15.09],[4.65,15.09],[-3.91,15.14],[-4.85,15.15],[-5.03,-15.1],[-4.56,-15.1],[3.44,-15.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[639.959,222.41],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.42,-1.92]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[2.97,-0.99],[0,0]],"v":[[5.1,-12.85],[5.26,15.17],[4.88,15.17],[-3.68,15.22],[-4.62,15.23],[-4.79,-14.19],[-5.26,-14.24],[3.95,-12.9]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[639.379,161.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"side 1 string ul Outlines","parent":15,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[375.876,323.92,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[640.669,298.005],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[640.099,328.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[641.019,358.485],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[640.439,388.73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[641.369,418.965],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[640.789,449.21],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4.28,0.025],[4.28,-0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[641.719,479.445],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-4,0.02],[4,-0.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[641.139,509.69],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.61,-85.09]],"o":[[0.078,85.344],[0,0]],"v":[[-1.039,-127.717],[0.429,127.717]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[646.23,400.852],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.51,-85.35]],"o":[[0.96,85.293],[0,0]],"v":[[-0.715,-127.822],[0.755,127.822]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[636.024,401.008],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.145],[5.025,15.095],[3.615,15.105],[-4.385,15.145],[-4.855,15.145],[-5.025,-15.085],[-4.085,-15.095],[4.475,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[641.174,434.085],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.15],[5.025,15.09],[4.645,15.09],[-3.915,15.14],[-4.855,15.15],[-5.025,-15.1],[-4.555,-15.1],[3.445,-15.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[640.654,343.37],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-5.019,-13.192],[-4.871,13.192],[-3.931,13.182],[4.629,13.131],[5.019,13.131],[4.863,-13.192]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[640.319,284.848],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.15],[5.025,15.09],[4.645,15.09],[-3.915,15.14],[-4.855,15.15],[-5.025,-15.1],[-4.565,-15.1],[3.435,-15.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[641.004,403.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.85,-15.145],[5.03,15.095],[3.61,15.105],[-4.39,15.145],[-4.85,15.145],[-5.03,-15.085],[-4.09,-15.095],[4.47,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[640.829,373.605],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.86,-15.145],[5.03,15.095],[3.62,15.105],[-4.38,15.145],[-4.85,15.145],[-5.03,-15.085],[-4.09,-15.095],[4.47,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[640.479,313.125],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.85,-15.15],[5.03,15.09],[4.65,15.09],[-3.91,15.14],[-4.85,15.15],[-5.03,-15.1],[-4.56,-15.1],[3.44,-15.14]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[641.349,464.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.855,-15.145],[5.025,15.095],[3.615,15.105],[-4.385,15.145],[-4.855,15.145],[-5.025,-15.085],[-4.085,-15.095],[4.475,-15.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[641.524,494.565],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":27,"ty":3,"nm":"base PEG","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[947.654,944.19,0],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":37,"s":[107,96,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":73,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":110,"s":[107,96,100]},{"t":146,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"base Outlines","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[67.876,-351.08,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.761,-5.338],[5.338,3.76],[-3.76,5.337],[-5.337,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[911.914,572.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.76,-5.337],[5.337,3.761],[-3.761,5.338],[-5.338,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[917.562,584.244],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.761,-5.338],[5.338,3.76],[-3.76,5.338],[-5.337,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[926.738,591.656],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.761,-5.337],[5.338,3.761],[-3.76,5.338],[-5.337,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[939.797,590.244],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.761,-5.338],[5.338,3.76],[-3.76,5.338],[-5.337,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[980.797,522.479],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.76,-5.338],[5.337,3.76],[-3.761,5.338],[-5.338,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[978.562,536.244],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.76,-5.338],[5.337,3.76],[-3.761,5.338],[-5.338,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[975.385,548.95],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.761,-5.338],[5.338,3.76],[-3.76,5.338],[-5.337,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[968.738,561.656],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.761,-5.337],[5.338,3.761],[-3.76,5.338],[-5.337,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[951.4,583.131],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.948,-2.077],[2.077,-2.948],[2.948,2.077],[-2.077,2.948]],"o":[[2.948,2.077],[-2.077,2.948],[-2.948,-2.077],[2.077,-2.948]],"v":[[3.761,-5.338],[5.338,3.76],[-3.76,5.337],[-5.337,-3.76]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[961.444,572.597],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.13,0.18],[2.86,0.33],[0.89,-2.4],[-2.65,-2.3],[-3.18,-3.18],[-0.38,-4.4]],"o":[[-0.12,-0.19],[-1.92,-2.74],[-2.54,-0.29],[-0.67,1.84],[3.76,3.25],[3.06,3.06],[0,0]],"v":[[5.985,-8.805],[5.605,-9.355],[-1.455,-14.715],[-7.805,-11.485],[-5.835,-4.215],[2.635,3.545],[8.485,15.005]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[930.624,260.935],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.02,0.54],[3.35,4.42],[2.12,0.55],[1.25,-1.79],[-1.99,-2.96],[-0.48,-0.81],[-0.47,-8.38]],"o":[[0,0],[-0.01,-0.53],[-0.22,-5.6],[-1.31,-1.74],[-2.11,-0.54],[-2.34,3.35],[0.55,0.82],[4.26,6.98],[0,0]],"v":[[9,20.39],[9,1.32],[8.95,-0.28],[4.41,-16.14],[-0.53,-19.85],[-6.66,-17.9],[-3.88,-4.49],[-2.32,-2.04],[4.41,20.04]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[938.549,253.62],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.13,0.18],[-2.86,0.33],[-0.88,-2.4],[2.65,-2.3],[3.18,-3.18],[0.76,-3.76],[0.05,-0.55]],"o":[[0.12,-0.19],[1.92,-2.74],[2.54,-0.29],[0.68,1.84],[-3.76,3.25],[-2.68,2.68],[-0.11,0.54],[0,0]],"v":[[-5.98,-8.805],[-5.6,-9.355],[1.46,-14.715],[7.8,-11.485],[5.84,-4.215],[-2.63,3.545],[-8.25,13.375],[-8.49,15.005]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[964.369,260.935],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.02,0.54],[-3.34,4.42],[-2.11,0.55],[-1.25,-1.79],[1.99,-2.96],[0.48,-0.81],[0.47,-8.38]],"o":[[0,0],[0.01,-0.53],[0.22,-5.6],[1.32,-1.74],[2.12,-0.54],[2.34,3.35],[-0.55,0.82],[-4.26,6.98],[0,0]],"v":[[-9,20.39],[-9,1.32],[-8.95,-0.28],[-4.42,-16.14],[0.52,-19.85],[6.66,-17.9],[3.88,-4.49],[2.32,-2.04],[-4.42,20.04]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[956.449,253.62],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.14,-0.04],[0.03,0.14],[-2.81,3.52],[-1.37,1.58],[0.95,5.6],[4.93,2.82],[0.04,0.02],[2.6,-0.27],[0,0],[0.05,0],[0.57,-0.05],[1.76,-1.01],[0.16,-0.11],[0.92,-5.41],[-3.72,-4.3],[-1.31,-1.64],[0.88,-4.42],[-0.06,0],[-0.07,0.06],[0.11,0.06]],"o":[[-0.16,0.09],[0.11,0.04],[-0.88,-4.42],[1.32,-1.64],[3.73,-4.3],[-0.95,-5.6],[-0.04,-0.02],[-2.26,-1.29],[0,0],[-0.05,0],[-0.57,-0.05],[-2.01,0.17],[-0.17,0.1],[-4.67,2.86],[-0.95,5.6],[1.38,1.58],[2.81,3.52],[-0.02,0.08],[0.07,0.02],[0.08,-0.06],[0,0]],"v":[[5.19,24.21],[5.31,24.48],[5.51,24.37],[8.6,11.65],[12.92,7.07],[17.38,-8.82],[7.94,-22.35],[7.83,-22.41],[0.36,-24.25],[-0.36,-24.25],[-0.5,-24.26],[-2.21,-24.26],[-7.94,-22.35],[-8.44,-22.04],[-17.38,-8.82],[-12.92,7.07],[-8.6,11.65],[-5.5,24.37],[-5.43,24.49],[-5.18,24.41],[-5.18,24.21]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.919,298.59],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.46],[5.46,0],[0,5.45],[-5.46,0]],"o":[[0,5.45],[-5.46,0],[0,-5.46],[5.46,0]],"v":[[9.88,0.005],[0,9.885],[-9.88,0.005],[0,-9.885]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.919,291.655],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-5.65,5.65],[5.65,-5.65]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[953.269,335.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-7.02,7.02],[7.02,-7.02]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[950.049,333.7],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-7.325,7.32],[7.325,-7.32]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[945.594,330.92],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-6.35,6.35],[6,-6],[6.35,-6.35]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[942.739,328.54],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5.21,4.84],[-0.05,0.05],[5.21,-4.84]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[941.709,426.57],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":2,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[5.47,-5.03],[5.08,-5.03],[5.07,-5.02],[-0.28,0.08],[-5.47,5.03]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[954.329,426.22],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":2,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5.27,-5.025],[-0.28,-0.275],[5.27,5.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[954.329,426.575],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":2,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-4.71,-4.385],[-0.05,-0.045],[4.71,4.385]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[941.709,426.665],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":2,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.94,1.72],[-1.92,0.46],[-1.22,-2.36],[0,-2.21],[0.02,-0.5]],"o":[[0.23,-1.94],[0.95,-1.71],[3.25,-0.78],[0.98,1.91],[0,0.53],[0,0]],"v":[[-7.29,3.87],[-5.77,-1.76],[-1.24,-5.22],[6.07,-2],[7.29,4.45],[7.26,6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[962.209,645.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":2,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.93,1.72],[-1.89,0.46],[-1.2,-2.36],[0,-2.22],[0.02,-0.51]],"o":[[0.24,-1.94],[0.92,-1.71],[3.2,-0.78],[0.96,1.91],[0,0.52],[0,0]],"v":[[-7.175,3.87],[-5.665,-1.76],[-1.215,-5.22],[5.975,-2],[7.175,4.45],[7.145,6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.734,645.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":2,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.93,1.72],[-1.9,0.46],[-1.2,-2.36],[-0.09,-1.8],[0,0],[0,-0.22],[0.03,-0.69]],"o":[[0.23,-1.94],[0.93,-1.71],[3.21,-0.78],[0.78,1.54],[0,0],[0.01,0.23],[0.02,0.73],[0,0]],"v":[[-7.205,3.87],[-5.695,-1.76],[-1.225,-5.22],[5.985,-2],[7.165,3.14],[7.165,3.19],[7.185,3.87],[7.165,6]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[933.164,645.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":2,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.08],[-5.04,-15.62]],"o":[[0,0.08],[-0.76,16.39],[0,0]],"v":[[-2.855,-24.39],[-2.865,-24.15],[3.625,24.39]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[955.864,894.34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":2,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.44,-8.37],[-5.43,-6.53]],"o":[[-0.04,8.5],[1.44,8.38],[0,0]],"v":[[-5.585,-24.3],[-4.215,1.12],[5.655,24.3]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[973.584,894.93],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":2,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.08],[5.04,-15.62]],"o":[[0,0.08],[0.76,16.39],[0,0]],"v":[[2.855,-24.39],[2.865,-24.15],[-3.625,24.39]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[941.344,894.34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":2,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.44,-8.37],[5.43,-6.53]],"o":[[0.03,8.5],[-1.44,8.38],[0,0]],"v":[[5.59,-24.3],[4.22,1.12],[-5.66,24.3]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[923.619,894.93],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":2,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.54,0],[0,-6.11],[6.11,0],[1.46,0.71]],"o":[[1.33,-0.57],[6.11,0],[0,6.11],[-1.72,0],[0,0]],"v":[[-7.465,-10.17],[-3.125,-11.06],[7.935,0],[-3.125,11.06],[-7.935,9.96]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[897.334,826.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":2,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.08,-0.1],[6.19,-0.83]],"o":[[-0.07,0.1],[-3.43,4.89],[0,0]],"v":[[7.6,-4.725],[7.38,-4.415],[-7.6,4.725]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[904.759,843.385],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":2,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.76,-5.19]],"o":[[6.81,0.36],[0,0]],"v":[[-8.275,-4.515],[8.275,4.515]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[903.664,809.085],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":2,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.53,0],[0,6.11],[-6.11,0],[-1.32,-0.56]],"o":[[-1.32,0.56],[-6.11,0],[0,-6.11],[1.53,0],[0,0]],"v":[[7.68,10.19],[3.38,11.06],[-7.68,0],[3.38,-11.06],[7.68,-10.19]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[998.829,826.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":2,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.58,5],[0,0],[7.1,0],[3.97,5.56],[0,0],[7.12,0],[3.97,5.53]],"o":[[-6.45,-0.63],[0,0],[-4,5.24],[-7.36,0],[0,0],[-4,5.27],[-7.33,0],[0,0]],"v":[[43.815,4.495],[28.155,-4.565],[27.375,-4.025],[9.965,4.595],[-7.865,-4.595],[-8.585,-4.075],[-26.035,4.595],[-43.815,-4.535]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[956.244,843.705],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":2,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-7.22,0],[-3.98,-5.46],[0,0],[-7.22,0],[-4,-5.23],[0,0],[-7.14,0]],"o":[[3.99,-5.39],[7.27,0],[0,0],[3.99,-5.39],[7.09,0],[0,0],[4,-5.29],[0,0]],"v":[[-44.335,4.38],[-26.725,-4.5],[-9.035,4.5],[-8.335,4.38],[9.275,-4.5],[27.395,4.44],[27.795,4.21],[44.335,-4.03]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[956.934,809.04],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":2,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-6.11],[6.11,0],[0,6.11],[-6.11,0]],"o":[[0,6.11],[-6.11,0],[0,-6.11],[6.11,0]],"v":[[11.06,0],[0,11.06],[-11.06,0],[0,-11.06]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[966.209,826.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":2,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-6.11],[6.11,0],[0,6.11],[-6.11,0]],"o":[[0,6.11],[-6.11,0],[0,-6.11],[6.11,0]],"v":[[11.06,0],[0,11.06],[-11.06,0],[0,-11.06]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[930.209,826.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":2,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1030.209,935.36],[866.359,935.36]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":2,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[925.739,733.01],[969.039,733.01]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":2,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[983.329,870.42],[983.329,870.19],[983.329,869.89]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 42","np":2,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-12.99,-0.42],[-0.4,0]],"o":[[0,0],[0,34.64],[0.41,0.01],[0,0]],"v":[[-18.585,-24.47],[-18.585,-17.88],[17.365,24.45],[18.585,24.47]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1001.914,894.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 43","np":2,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.73,-7.46],[-1.26,-4.4],[-0.08,-3.32],[1.15,-3.47],[2.62,-3.24],[3.6,-0.28],[0.14,0]],"o":[[3,0],[2.34,3.04],[0.78,2.76],[0.1,4.1],[-1.47,4.51],[-5.12,6.33],[-0.15,0.01],[0,0]],"v":[[-11.625,-32.295],[4.755,-21.385],[10.365,-10.245],[11.715,-1.125],[10.025,10.265],[3.635,21.945],[-11.385,32.275],[-11.815,32.295]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[996.554,826.365],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 44","np":2,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.04,-0.04],[-2.42,-5.11],[-1.08,-0.94],[-4.79,-2.62],[0.4,-7.63],[6.45,-4.09],[-0.04,-0.34],[-0.02,-0.04],[0.11,0.29]],"o":[[-0.05,0.04],[-4.53,3.78],[0.59,1.25],[4.14,3.57],[6.71,3.67],[-0.39,7.63],[-0.29,0.19],[0,0.04],[0.15,0.22],[0,0]],"v":[[-8.95,-32.64],[-9.09,-32.52],[-12.83,-16.57],[-10.32,-13.25],[4.53,-6.5],[14.85,12.63],[3.45,31.51],[2.86,32.3],[2.9,32.42],[3.47,32.31]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[983.329,749.18],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 45","np":2,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[912.559,870.42],[912.559,870.19],[912.559,869.89]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 46","np":2,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[12.88,-0.24],[0.23,0]],"o":[[0,0],[0,35.11],[-0.24,0.01],[0,0]],"v":[[18.585,-24.47],[18.585,-17.88],[-17.885,24.46],[-18.585,24.47]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[893.974,894.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 47","np":2,"cix":2,"bm":0,"ix":47,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.13,-0.01],[5.44,-6.73],[1.35,-4.67],[0.08,-3.37],[-1.1,-3.42],[-2.79,-3.36],[-3.59,-0.54],[-0.28,0]],"o":[[-0.12,0],[-3.12,0.24],[-2.53,3.13],[-0.8,2.79],[-0.09,4.03],[1.52,4.76],[4.84,5.84],[0.32,0.05],[0,0]],"v":[[11.62,-32.295],[11.25,-32.275],[-4.26,-22.035],[-10.34,-10.355],[-11.72,-1.125],[-10.1,10.065],[-3.33,22.315],[10.91,32.225],[11.81,32.295]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[899.339,826.365],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 48","np":2,"cix":2,"bm":0,"ix":48,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.58,-5.18],[0.72,-0.75],[0.23,-0.2],[4.8,-2.62],[1.22,-5.69],[-0.1,-1.82],[-3.72,-4.02],[-1.84,-1.17],[0.04,-0.34],[0.12,-0.03],[-0.08,0.21]],"o":[[4.7,3.8],[-0.45,0.91],[-0.21,0.22],[-4.14,3.57],[-5.1,2.79],[-0.39,1.79],[0.28,5.45],[1.47,1.61],[0.29,0.19],[-0.01,0.14],[-0.2,0.06],[0,0]],"v":[[8.76,-32.62],[12.55,-16.37],[10.8,-13.86],[10.14,-13.23],[-4.72,-6.48],[-14.58,7.21],[-15.03,12.65],[-8.63,27.33],[-3.63,31.53],[-3.04,32.32],[-3.28,32.56],[-3.65,32.33]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[912.739,749.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 49","np":2,"cix":2,"bm":0,"ix":49,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.31,-1.05],[5.46,0],[0,0],[1.53,4.88],[0,1.24],[0,0],[-6.6,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-6.56],[0,0]],"o":[[-1.44,5.01],[0,0],[-5.36,0],[-0.35,-1.13],[0,0],[0,-6.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[6.54,0.07],[0,0],[0,1.14]],"v":[[83.06,3.655],[71.53,12.355],[-71.53,12.355],[-82.99,3.915],[-83.53,0.355],[-83.53,-0.355],[-71.53,-12.355],[-29.66,-12.355],[-9.9,-12.355],[11.87,-12.355],[31.62,-12.355],[71.53,-12.355],[71.66,-12.355],[83.53,-0.355],[83.53,0.355]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.619,931.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 50","np":2,"cix":2,"bm":0,"ix":50,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.49,-0.15],[0,-2.7],[1.07,-1.07],[1.62,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.24],[-1.07,1.07],[-1.07,0.25],[-0.47,0],[0,0]],"o":[[2.49,0.67],[0,1.62],[-1.07,1.07],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.23,0],[0,-1.62],[0.75,-0.76],[0.44,-0.11],[0,0],[0.54,0]],"v":[[37.545,-5.665],[41.885,-0.005],[40.155,4.155],[35.995,5.885],[35.705,5.885],[20.375,5.885],[5.375,5.885],[-3.415,5.885],[-18.415,5.885],[-35.065,5.885],[-36.005,5.885],[-41.885,-0.005],[-40.155,-4.155],[-37.375,-5.715],[-36.005,-5.885],[35.995,-5.885]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,864.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 51","np":2,"cix":2,"bm":0,"ix":51,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.1,-0.25],[0.45,0],[0,0],[0.34,0.07],[0,2.89],[-1.07,1.07],[-0.89,0.29],[-0.63,0],[0,0],[0,0],[0,-3.23],[1.07,-1.07]],"o":[[-0.42,0.1],[0,0],[-0.35,0],[-2.75,-0.48],[0,-1.62],[0.65,-0.65],[0.57,-0.19],[0,0],[0,0],[3.24,0],[0,1.62],[-0.77,0.77]],"v":[[37.295,5.735],[35.995,5.885],[-36.005,5.885],[-37.035,5.785],[-41.885,-0.005],[-40.155,-4.155],[-37.815,-5.595],[-36.005,-5.885],[-23.655,-5.885],[35.995,-5.885],[41.885,-0.005],[40.155,4.155]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,788.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 52","np":2,"cix":2,"bm":0,"ix":52,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.79,-0.38],[1.2,0],[0,0],[0.96,0.42],[0,3.16],[-1.41,1.4],[-2.13,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-4.27],[1.41,-1.41]],"o":[[-1.02,0.49],[0,0],[-1.11,0],[-2.73,-1.21],[0,-2.14],[1.41,-1.41],[0,0],[0,0],[0,0],[0,0],[0,0],[4.27,0],[0,2.14],[-0.61,0.62]],"v":[[26.305,6.995],[22.945,7.765],[-22.945,7.765],[-26.065,7.105],[-30.705,-0.005],[-28.425,-5.485],[-22.945,-7.765],[-21.885,-7.765],[-7.295,-7.765],[7.295,-7.765],[21.885,-7.765],[22.945,-7.765],[30.705,-0.005],[28.425,5.485]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,709.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 53","np":2,"cix":2,"bm":0,"ix":53,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[954.919,630.31],[954.919,649.7],[954.919,650.28],[954.919,700.9]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 54","np":2,"cix":2,"bm":0,"ix":54,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[940.329,630.47],[940.329,648.97]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 55","np":2,"cix":2,"bm":0,"ix":55,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[940.329,649.02],[940.329,651.83],[940.329,700.75]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 56","np":2,"cix":2,"bm":0,"ix":56,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[969.509,630.12],[969.509,650.28],[969.509,701.09]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 57","np":2,"cix":2,"bm":0,"ix":57,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[925.739,631.02],[925.739,649.7],[925.739,700.2]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 58","np":2,"cix":2,"bm":0,"ix":58,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.68,0.27],[-1.46,-1.03],[1.33,-2.82],[0.22,-0.31],[2.95,2.07],[-2.07,2.95]],"o":[[1.63,-0.27],[2.64,1.86],[-0.16,0.33],[-2.08,2.95],[-2.95,-2.08],[1.05,-1.5]],"v":[[-0.965,-6.79],[3.845,-5.69],[5.995,2.44],[5.425,3.41],[-3.675,4.99],[-5.255,-4.11]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[909.004,559.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 59","np":2,"cix":2,"bm":0,"ix":59,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,6.32],[0,0],[-6.28,0]],"o":[[-6.28,0],[0,0],[0,-6.32],[0,0]],"v":[[5.705,11.825],[-5.705,0.335],[-5.705,-0.335],[5.705,-11.825]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[987.094,537.655],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 60","np":2,"cix":2,"bm":0,"ix":60,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,6.6],[0,0],[-6.6,0]],"o":[[-6.6,0],[0,0],[0,-6.6],[0,0]],"v":[[6,12.355],[-6,0.355],[-6,-0.355],[6,-12.355]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[969.389,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 61","np":2,"cix":2,"bm":0,"ix":61,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,6.6],[0,0],[-6.6,0]],"o":[[-6.6,0],[0,0],[0,-6.6],[0,0]],"v":[[6,12.355],[-6,0.355],[-6,-0.355],[6,-12.355]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[950.389,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 62","np":2,"cix":2,"bm":0,"ix":62,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,6.6],[0,0],[-6.6,0]],"o":[[-6.6,0],[0,0],[0,-6.6],[0,0]],"v":[[6,12.355],[-6,0.355],[-6,-0.355],[6,-12.355]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[930.389,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 63","np":2,"cix":2,"bm":0,"ix":63,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,6.6],[0,0],[-6.6,0]],"o":[[-6.6,0],[0,0],[0,-6.6],[0,0]],"v":[[6,12.355],[-6,0.355],[-6,-0.355],[6,-12.355]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[910.389,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 64","np":2,"cix":2,"bm":0,"ix":64,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.64,-0.97],[0.7,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,6.6],[0,0],[-6.6,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.64,-0.11],[0,-5.93],[0,0]],"o":[[-0.66,0.12],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-6.6,0],[0,0],[0,-6.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0.67,0],[5.67,0.94],[0,0],[0,5.9]],"v":[[45.275,12.175],[43.235,12.355],[41.725,12.355],[27.765,12.355],[8.765,12.355],[-11.235,12.355],[-31.235,12.355],[-41.725,12.355],[-43.235,12.355],[-55.235,0.355],[-55.235,-0.355],[-43.235,-12.355],[-31.235,-12.355],[-11.235,-12.355],[8.765,-12.355],[27.765,-12.355],[43.235,-12.355],[45.205,-12.185],[55.235,-0.355],[55.235,0.355]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 65","np":2,"cix":2,"bm":0,"ix":65,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.68,-0.74],[-1.92,-3.12],[0,0]],"o":[[0.74,0.73],[2.75,3],[10.93,17.89],[0,0]],"v":[[-10.015,-23.825],[-7.875,-21.615],[-0.915,-12.385],[8.345,23.825]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[915.914,574.715],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 66","np":2,"cix":2,"bm":0,"ix":66,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-20.83,20.47],[0,0]],"v":[[10.415,-23.825],[-7.945,23.825]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[978.934,574.715],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 67","np":2,"cix":2,"bm":0,"ix":67,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-11.64],[0,-17.65],[0,0]],"o":[[7.06,0],[0,14.83],[0,14.47],[0,0]],"v":[[-8.115,-32.12],[8.115,-15.18],[-2.825,15.18],[4.235,32.12]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[960.624,476.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 68","np":2,"cix":2,"bm":0,"ix":68,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-11.64],[0,-17.65],[0,0]],"o":[[-7.06,0],[0,14.83],[0,14.47],[0,0]],"v":[[8.115,-32.12],[-8.115,-15.18],[2.825,15.18],[-4.235,32.12]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[934.624,476.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 69","np":2,"cix":2,"bm":0,"ix":69,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,4.27],[-1.41,1.4],[-2.13,0],[0,0],[0,-4.27],[1.41,-1.41],[2.14,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-4.27,0],[0,-2.14],[1.41,-1.41],[0,0],[4.27,0],[0,2.14],[-1.4,1.41],[0,0],[0,0],[0,0],[0,0]],"v":[[-21.885,7.765],[-22.945,7.765],[-30.705,-0.005],[-28.425,-5.485],[-22.945,-7.765],[22.945,-7.765],[30.705,-0.005],[28.425,5.485],[22.945,7.765],[21.885,7.765],[7.295,7.765],[-7.295,7.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,622.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 70","np":2,"cix":2,"bm":0,"ix":70,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.14,-0.01],[0,-4.13],[1.41,-1.41],[2.14,0],[0,0],[0,4.27],[-1.41,1.4],[-1.96,0.11],[-0.14,0],[0,0]],"o":[[4.08,0.22],[0,2.14],[-1.4,1.41],[0,0],[-4.27,0],[0,-2.14],[1.32,-1.32],[0.14,-0.01],[0,0],[0.14,0]],"v":[[23.365,-7.755],[30.705,-0.005],[28.425,5.485],[22.945,7.765],[-22.945,7.765],[-30.705,-0.005],[-28.425,-5.485],[-23.365,-7.755],[-22.945,-7.765],[22.945,-7.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,606.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 71","np":2,"cix":2,"bm":0,"ix":71,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,-4.27],[1.41,-1.41],[2.14,0],[0,0],[0,4.27],[-1.41,1.4],[-2.13,0],[0,0]],"o":[[0,0],[4.27,0],[0,2.14],[-1.4,1.41],[0,0],[-4.27,0],[0,-2.14],[1.41,-1.41],[0,0],[0,0]],"v":[[17.235,-7.765],[22.945,-7.765],[30.705,-0.005],[28.425,5.485],[22.945,7.765],[-22.945,7.765],[-30.705,-0.005],[-28.425,-5.485],[-22.945,-7.765],[-17.235,-7.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,516.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 72","np":2,"cix":2,"bm":0,"ix":72,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,3.2],[-1.05,1.05],[-1.6,0],[0,0],[0,-3.2],[1.06,-1.05],[1.6,0],[0,0]],"o":[[0,0],[-3.2,0],[0,-1.6],[1.05,-1.05],[0,0],[3.2,0],[0,1.6],[-1.06,1.05],[0,0],[0,0]],"v":[[-4.885,5.82],[-9.355,5.82],[-15.175,0],[-13.465,-4.11],[-9.355,-5.82],[9.355,-5.82],[15.175,0],[13.465,4.11],[9.355,5.82],[4.885,5.82]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,438.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 73","np":2,"cix":2,"bm":0,"ix":73,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.54,-0.27],[0.95,0],[0,0],[0,0],[0,0],[0.61,0.23],[0,2.51],[-1.05,1.05],[-0.95,0.28],[-0.56,0],[0,0],[0,0],[0,0],[-0.74,-0.35],[0,-2.34],[1.06,-1.05]],"o":[[-0.8,0.42],[0,0],[0,0],[0,0],[-0.69,0],[-2.24,-0.81],[0,-1.6],[0.68,-0.68],[0.52,-0.15],[0,0],[0,0],[0,0],[0.86,0],[2,0.91],[0,1.6],[-0.43,0.42]],"v":[[12.005,5.17],[9.355,5.82],[1.235,5.82],[-1.205,5.82],[-9.355,5.82],[-11.325,5.47],[-15.175,0],[-13.465,-4.11],[-10.975,-5.59],[-9.355,-5.82],[-0.705,-5.82],[1.435,-5.82],[9.355,-5.82],[11.775,-5.28],[15.175,0],[13.465,4.11]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,426.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 74","np":2,"cix":2,"bm":0,"ix":74,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.6,0],[0,0],[0,3.2],[-1.05,1.05],[-1.6,0],[0,0],[0,-3.2],[1.06,-1.05]],"o":[[0,0],[-3.2,0],[0,-1.6],[1.05,-1.05],[0,0],[3.2,0],[0,1.6],[-1.06,1.05]],"v":[[9.355,5.82],[-9.355,5.82],[-15.175,0],[-13.465,-4.11],[-9.355,-5.82],[9.355,-5.82],[15.175,0],[13.465,4.11]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,414.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 75","np":2,"cix":2,"bm":0,"ix":75,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.31,-1.2],[0,-0.86],[1.76,-1.76],[2.66,0],[0,0],[0,0],[0,0],[0,0],[0.91,0.29],[1.2,1.48],[0.36,1.27],[0,0.92],[-1.76,1.76],[-1.39,0.49],[-0.08,0.02],[-1.02,0],[0,0],[0,0],[-1.09,-0.43],[-0.03,-0.01],[-1.07,-1.43]],"o":[[0.22,0.79],[0,2.67],[-1.76,1.76],[0,0],[0,0],[0,0],[0,0],[-1,0],[-1.85,-0.57],[-0.81,-1],[-0.25,-0.85],[0,-2.66],[1.02,-1.02],[0.09,-0.03],[0.93,-0.3],[0,0],[0,0],[1.23,0],[0.04,0.01],[1.68,0.68],[0.72,0.97]],"v":[[11.315,-2.485],[11.645,-0.005],[8.795,6.855],[1.945,9.705],[1.585,9.705],[-0.005,9.705],[-1.585,9.705],[-1.945,9.705],[-4.815,9.265],[-9.485,6.095],[-11.265,2.655],[-11.645,-0.005],[-8.795,-6.855],[-5.135,-9.165],[-4.885,-9.245],[-1.945,-9.705],[1.115,-9.705],[1.945,-9.705],[5.445,-9.045],[5.545,-9.005],[9.735,-5.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,332.245],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 76","np":2,"cix":2,"bm":0,"ix":76,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[14.5,0.39],[0,-7.16],[0,-6.36],[0,-10.24],[-16.71,0],[0,0],[0,8.47],[0,6.7],[0,7.41]],"o":[[-14.51,0.39],[0,7.41],[0,6.7],[0,8.47],[0,0],[16.7,0],[0,-10.24],[0,-6.36],[0,-7.15]],"v":[[0.005,-32.635],[-17.475,-19.245],[-11.115,-4.415],[-19.585,14.995],[-0.295,32.635],[0.295,32.635],[19.585,14.995],[11.115,-4.415],[17.465,-19.245]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,374.605],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 77","np":2,"cix":2,"bm":0,"ix":77,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.55,0]],"o":[[-0.51,-0.01],[0,0]],"v":[[0.795,0.01],[-0.795,-0.01]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[946.834,341.96],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 78","np":2,"cix":2,"bm":0,"ix":78,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.51,-0.01]],"o":[[-0.54,0],[0,0]],"v":[[0.79,-0.01],[-0.79,0.01]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[948.419,341.96],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 79","np":2,"cix":2,"bm":0,"ix":79,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.54,0],[0,-6.11],[6.11,0],[1.46,0.71],[0,0],[-0.09,4.03],[-0.8,2.79],[0,0]],"o":[[6.11,0],[0,6.11],[-1.72,0],[0,0],[-1.1,-3.42],[0.08,-3.37],[0,0],[1.33,-0.57]],"v":[[-2.19,-11.06],[8.87,0],[-2.19,11.06],[-7,9.96],[-7.16,10.01],[-8.78,-1.18],[-7.4,-10.41],[-6.53,-10.17]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[896.399,826.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 80","np":2,"cix":2,"bm":0,"ix":80,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.92,-3.12],[0.22,-0.31],[2.95,2.07],[-2.07,2.95],[-1.68,0.27]],"o":[[-0.16,0.33],[-2.08,2.95],[-2.95,-2.08],[1.05,-1.5],[2.75,3]],"v":[[6.66,2.305],[6.09,3.275],[-3.01,4.855],[-4.59,-4.245],[-0.3,-6.925]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[908.339,560.025],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 81","np":2,"cix":2,"bm":0,"ix":81,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.6,0],[0,0],[0,-6.6],[0,0],[-6.6,0],[0,0],[0,0],[0,6.6],[0,0]],"o":[[0,0],[-6.6,0],[0,0],[0,6.6],[0,0],[0,0],[-6.6,0],[0,0],[0,-6.6]],"v":[[0,-12.355],[12,-12.355],[0,-0.355],[0,0.355],[12,12.355],[1.51,12.355],[0,12.355],[-12,0.355],[-12,-0.355]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[904.389,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 82","np":2,"cix":2,"bm":0,"ix":82,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.4,-1.73],[0.28,-1.62],[2.4,-0.42],[0,0],[0,0],[0.57,-0.19],[0,0],[-0.01,0.14],[0.29,0.19],[1.47,1.61],[0,0],[-0.75,1.25],[-1.45,-0.1],[-1.48,-0.73],[-1.4,-0.07]],"o":[[1.33,0.96],[-0.28,1.61],[0,0],[0,0],[-0.63,0],[0,0],[0.12,-0.03],[0.04,-0.34],[-1.84,-1.17],[0,0],[-0.77,-1.23],[0.75,-1.24],[1.65,0.13],[1.26,0.63],[2.96,0.16]],"v":[[9.81,-2.38],[11.57,1.95],[8.39,5.73],[8.39,6.08],[-3.96,6.08],[-5.77,6.37],[-6.12,5.38],[-5.88,5.14],[-6.47,4.35],[-11.47,0.15],[-11.06,-0.23],[-11.1,-4.37],[-7.42,-6.27],[-2.92,-4.3],[1.14,-3.24]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[915.579,776.34],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 83","np":2,"cix":2,"bm":0,"ix":83,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.44,-8.37],[5.43,-6.53],[0,0],[0,0],[0,0],[0,35.11],[0,0],[0,0],[0,0]],"o":[[0.03,8.5],[-1.44,8.38],[0,0],[0,0],[0,0],[12.88,-0.24],[0,0],[0,0],[0,0],[0,0]],"v":[[26.525,-24.205],[25.155,1.215],[15.275,24.395],[15.275,24.645],[-26.595,24.645],[-26.595,24.515],[9.875,-17.825],[9.875,-24.415],[9.875,-24.645],[26.525,-24.645]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[902.684,894.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 84","np":2,"cix":2,"bm":0,"ix":84,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.44,1.88],[0,0],[-5.1,2.79],[-4.14,3.57],[-0.21,0.22],[-0.81,-2.4],[2.12,-1.73],[2.57,-0.92],[1.75,-3.86],[3,-1.48],[1.03,2.61]],"o":[[0,0],[1.22,-5.69],[4.8,-2.62],[0.23,-0.2],[2.66,-1.87],[0.86,2.6],[-2.12,1.72],[-3.99,1.43],[-1.39,3.04],[-2.51,1.25],[-0.7,-1.77]],"v":[[-15.845,6.475],[-16.195,6.405],[-6.335,-7.285],[8.525,-14.035],[9.185,-14.665],[15.485,-11.465],[12.785,-4.245],[5.415,-0.765],[-4.545,6.565],[-8.895,15.285],[-15.645,12.065]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[914.354,749.965],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 85","np":2,"cix":2,"bm":0,"ix":85,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.6,0],[0,0],[0,-6.6],[0,0],[-6.6,0],[0,0],[0,6.6],[0,0]],"o":[[0,0],[-6.6,0],[0,0],[0,6.6],[0,0],[-6.6,0],[0,0],[0,-6.6]],"v":[[-4,-12.355],[16,-12.355],[4,-0.355],[4,0.355],[16,12.355],[-4,12.355],[-16,0.355],[-16,-0.355]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[920.389,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 86","np":2,"cix":2,"bm":0,"ix":86,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.11,0],[0,-6.11],[6.11,0],[0,6.11]],"o":[[6.11,0],[0,6.11],[-6.11,0],[0,-6.11]],"v":[[0,-11.06],[11.06,0],[0,11.06],[-11.06,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[930.209,826.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 87","np":2,"cix":2,"bm":0,"ix":87,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.78,1.54],[3.21,-0.78],[0.93,-1.71],[0.23,-1.94],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.09,-1.8],[-1.2,-2.36],[-1.9,0.46],[-0.93,1.72],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[7.295,-9.415],[7.295,9.085],[6.115,3.945],[-1.095,0.725],[-5.565,4.185],[-7.075,9.815],[-7.295,9.815],[-7.295,-8.865],[-7.295,-9.815],[7.295,-9.815]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[933.034,639.885],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 88","np":2,"cix":2,"bm":0,"ix":88,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.93,1.72],[-1.9,0.46],[-1.2,-2.36],[-0.09,-1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0.23,-1.94],[0.93,-1.71],[3.21,-0.78],[0.78,1.54],[0,0],[0,0],[0,0]],"v":[[7.295,30.065],[7.295,30.855],[-7.295,30.855],[-7.295,29.515],[-7.295,-20.985],[-7.075,-20.985],[-5.565,-26.615],[-1.095,-30.075],[6.115,-26.855],[7.295,-21.715],[7.295,-21.665],[7.295,-18.855]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[933.034,670.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 89","np":2,"cix":2,"bm":0,"ix":89,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,2.51],[-1.05,1.05],[-0.95,0.28]],"o":[[0,0],[0,0],[0,0],[-2.24,-0.81],[0,-1.6],[0.68,-0.68],[0,0]],"v":[[-0.055,-4.14],[4.605,0.2],[-0.555,4.99],[-0.755,5.53],[-4.605,0.06],[-2.895,-4.05],[-0.405,-5.53]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[937.054,426.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 90","np":2,"cix":2,"bm":0,"ix":90,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.04,-15.62],[0,0],[0,0],[0,0],[-1.44,8.38],[0.03,8.5],[0,0]],"o":[[0.76,16.39],[0,0],[0,0],[0,0],[5.43,-6.53],[1.44,-8.37],[0,0],[0,0]],"v":[[12.745,-24.645],[6.255,23.895],[6.255,24.645],[-13.505,24.645],[-13.505,24.395],[-3.625,1.215],[-2.255,-24.205],[-2.255,-24.645]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[931.464,894.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 91","np":2,"cix":2,"bm":0,"ix":91,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.47,-8.38],[0,0],[1.76,-1.01],[0.16,-0.11],[0,0],[3.06,3.06],[3.76,3.25],[-0.67,1.84],[-2.54,-0.29],[-1.92,-2.74]],"o":[[0,0],[-2.01,0.17],[-0.17,0.1],[0,0],[-0.38,-4.4],[-3.18,-3.18],[-2.65,-2.3],[0.89,-2.4],[2.86,0.33],[4.26,6.98]],"v":[[9.035,12.42],[11.785,13.09],[6.055,15],[5.555,15.31],[5.185,14.7],[-0.665,3.24],[-9.135,-4.52],[-11.105,-11.79],[-4.755,-15.02],[2.305,-9.66]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[933.924,261.24],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 92","np":2,"cix":2,"bm":0,"ix":92,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.61,0.23],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.69,0],[0,0],[0,0],[0,0]],"v":[[5.06,1.59],[5.06,2.84],[-3.09,2.84],[-5.06,2.49],[-4.86,1.95],[0.3,-2.84]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[941.359,429.46],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 93","np":2,"cix":2,"bm":0,"ix":93,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[-0.56,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0.52,-0.15],[0,0]],"v":[[5.135,-2.98],[5.135,-1.91],[-0.125,2.98],[-4.785,-1.36],[-5.135,-2.75],[-3.515,-2.98]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[941.784,423.64],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 94","np":2,"cix":2,"bm":0,"ix":94,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.26,6.98],[0.55,0.82],[-2.34,3.35],[-2.11,-0.54],[-1.31,-1.74],[-0.22,-5.6],[0.01,-0.53],[0,0],[0,0],[0.57,-0.05],[0,0]],"o":[[-0.48,-0.81],[-1.99,-2.96],[1.25,-1.79],[2.12,0.55],[3.35,4.42],[-0.02,0.54],[0,0],[0,0],[-0.57,-0.05],[0,0],[-0.47,-8.38]],"v":[[-2.295,-2.2],[-3.855,-4.65],[-6.635,-18.06],[-0.505,-20.01],[4.435,-16.3],[8.975,-0.44],[8.925,1.16],[8.925,20.23],[8.895,20.55],[7.185,20.55],[4.435,19.88]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[938.524,253.78],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 95","np":2,"cix":2,"bm":0,"ix":95,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0.92],[-1.76,1.76],[-1.39,0.49],[-0.07,0.06],[-1.02,0]],"o":[[0,0],[0,0],[-0.25,-0.85],[0,-2.66],[1.02,-1.02],[0.07,0.02],[0.93,-0.3],[0,0]],"v":[[6.38,-6.18],[-5.97,6.17],[-6,6.18],[-6.38,3.52],[-3.53,-3.33],[0.13,-5.64],[0.38,-5.72],[3.32,-6.18]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[942.359,328.72],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 96","np":2,"cix":2,"bm":0,"ix":96,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.09,-0.43],[0,0],[0,0],[0,0],[0.36,1.27],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.81,-1],[0,0],[0,0],[0,0],[1.23,0]],"v":[[8.355,-7.24],[8.205,-6.84],[-6.445,7.8],[-6.575,7.9],[-8.355,4.46],[-8.325,4.45],[4.025,-7.9],[4.855,-7.9]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[944.714,330.44],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 97","np":2,"cix":2,"bm":0,"ix":97,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[6.195,-0.18],[1.005,4.77],[1.005,5.82],[-1.435,5.82],[-1.435,4.57],[-6.195,0.14],[-0.935,-4.75],[-0.935,-5.82],[1.205,-5.82],[1.205,-4.93]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.854,426.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 98","np":2,"cix":2,"bm":0,"ix":98,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.96,1.91],[3.2,-0.78],[0.92,-1.71],[0.24,-1.94],[0,0],[0.01,0.23],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,-2.22],[-1.2,-2.36],[-1.89,0.46],[-0.93,1.72],[0,0],[0,-0.22],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[7.295,9.525],[7.295,10.105],[7.285,10.105],[6.085,3.655],[-1.105,0.435],[-5.555,3.895],[-7.065,9.525],[-7.275,9.525],[-7.295,8.845],[-7.295,8.795],[-7.295,-9.705],[-7.295,-10.105],[7.295,-10.105],[7.295,-9.865]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,640.175],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 99","np":2,"cix":2,"bm":0,"ix":99,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.22],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.02,0.73],[0,0],[-0.93,1.72],[-1.89,0.46],[-1.2,-2.36]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.03,-0.69],[0,0],[0.24,-1.94],[0.92,-1.71],[3.2,-0.78],[0.96,1.91]],"v":[[7.285,-20.405],[7.295,-20.405],[7.295,30.215],[7.295,30.855],[-7.295,30.855],[-7.295,30.065],[-7.295,-18.855],[-7.275,-20.985],[-7.065,-20.985],[-5.555,-26.615],[-1.105,-30.075],[6.085,-26.855]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,670.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 100","np":2,"cix":2,"bm":0,"ix":100,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.46,0],[0,-5.46],[5.46,0],[0,5.45]],"o":[[5.46,0],[0,5.45],[-5.46,0],[0,-5.46]],"v":[[0,-9.885],[9.88,0.005],[0,9.885],[-9.88,0.005]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.919,291.655],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 101","np":2,"cix":2,"bm":0,"ix":101,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.6,0],[0,0],[0,-6.6],[0,0],[-6.6,0],[0,0],[0,6.6],[0,0]],"o":[[0,0],[-6.6,0],[0,0],[0,6.6],[0,0],[-6.6,0],[0,0],[0,-6.6]],"v":[[-4,-12.355],[16,-12.355],[4,-0.355],[4,0.355],[16,12.355],[-4,12.355],[-16,0.355],[-16,-0.355]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[940.389,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 102","np":2,"cix":2,"bm":0,"ix":102,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.07,-1.43],[0,0],[0,0],[0,0],[1.2,1.48],[0,0],[0,0],[0,0],[-0.03,-0.01]],"o":[[0,0],[0,0],[0,0],[-1.85,-0.57],[0,0],[0,0],[0,0],[0.04,0.01],[1.68,0.68]],"v":[[9.61,-5.875],[9.32,-5.675],[-4.72,8.365],[-4.94,9.155],[-9.61,5.985],[-9.48,5.885],[5.17,-8.755],[5.32,-9.155],[5.42,-9.115]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.749,332.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 103","np":2,"cix":2,"bm":0,"ix":103,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.31,-1.2],[0,0],[0,0],[0,0],[0,0],[0,0],[0.91,0.29],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[-1,0],[0,0],[0,0],[0,0],[0.72,0.97]],"v":[[8.065,-4.455],[8.045,-4.445],[-3.255,6.855],[-3.255,7.735],[-4.835,7.735],[-5.195,7.735],[-8.065,7.295],[-7.845,6.505],[6.195,-7.535],[6.485,-7.735]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[950.874,334.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 104","np":2,"cix":2,"bm":0,"ix":104,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.86],[1.76,-1.76],[2.66,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.22,0.79],[0,2.67],[-1.76,1.76],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[5.495,-6.095],[5.825,-3.615],[2.975,3.245],[-3.875,6.095],[-4.235,6.095],[-5.825,6.095],[-5.825,5.215],[5.475,-6.085]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[953.444,335.855],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 105","np":2,"cix":2,"bm":0,"ix":105,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.74,-0.35],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0.86,0]],"v":[[5.17,-2.28],[-0.18,2.82],[-5.17,-1.93],[-5.17,-2.82],[2.75,-2.82]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[954.229,423.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 106","np":2,"cix":2,"bm":0,"ix":106,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.04,-15.62],[0,0],[0,0],[0,0],[0.76,16.39],[0,0]],"o":[[0,0],[0,0],[0,0],[5.04,-15.62],[0,0],[-0.76,16.39]],"v":[[10.885,23.895],[10.885,24.645],[-10.885,24.645],[-10.885,23.895],[-4.395,-24.645],[4.395,-24.645]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[948.604,894.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 107","np":2,"cix":2,"bm":0,"ix":107,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.95,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.8,0.42],[0,0],[0,0],[0,0],[0,0]],"v":[[5.355,2.3],[5.385,2.35],[2.735,3],[-5.385,3],[-5.385,1.95],[-0.195,-3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[954.244,429.3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 108","np":2,"cix":2,"bm":0,"ix":108,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-3.2],[1.06,-1.05],[1.6,0],[0,0],[0,0],[0,0],[0,3.2],[-1.05,1.05],[-1.6,0]],"o":[[3.2,0],[0,1.6],[-1.06,1.05],[0,0],[0,0],[0,0],[-3.2,0],[0,-1.6],[1.05,-1.05],[0,0]],"v":[[9.355,-5.82],[15.175,0],[13.465,4.11],[9.355,5.82],[4.885,5.82],[-4.885,5.82],[-9.355,5.82],[-15.175,0],[-13.465,-4.11],[-9.355,-5.82]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,438.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 109","np":2,"cix":2,"bm":0,"ix":109,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-2.34],[1.06,-1.05],[0.54,-0.27],[0,0],[0,0]],"o":[[2,0.91],[0,1.6],[-0.43,0.42],[0,0],[0,0],[0,0]],"v":[[0.975,-5.225],[4.375,0.055],[2.665,4.165],[1.205,5.225],[1.175,5.175],[-4.375,-0.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[958.424,426.425],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 110","np":2,"cix":2,"bm":0,"ix":110,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-3.2],[1.06,-1.05],[1.6,0],[0,0],[0,3.2],[-1.05,1.05],[-1.6,0]],"o":[[3.2,0],[0,1.6],[-1.06,1.05],[0,0],[-3.2,0],[0,-1.6],[1.05,-1.05],[0,0]],"v":[[9.355,-5.82],[15.175,0],[13.465,4.11],[9.355,5.82],[-9.355,5.82],[-15.175,0],[-13.465,-4.11],[-9.355,-5.82]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,414.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 111","np":2,"cix":2,"bm":0,"ix":111,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.02,0.54],[-3.34,4.42],[-2.11,0.55],[-1.25,-1.79],[1.99,-2.96],[0.48,-0.81],[0.47,-8.38],[0,0],[0.05,-0.55],[0,0],[2.6,-0.27],[0,0],[0.05,0],[0,0],[0,0]],"o":[[0.22,-5.6],[1.32,-1.74],[2.12,-0.54],[2.34,3.35],[-0.55,0.82],[-4.26,6.98],[0,0],[-0.11,0.54],[0,0],[-2.26,-1.29],[0,0],[-0.05,0],[0,0],[0,0],[0.01,-0.53]],"v":[[-8.935,-1.365],[-4.405,-17.225],[0.535,-20.935],[6.675,-18.985],[3.895,-5.575],[2.335,-3.125],[-4.405,18.955],[-0.315,19.605],[-0.555,21.235],[-0.685,21.475],[-8.155,19.635],[-8.875,19.635],[-9.015,19.625],[-8.985,19.305],[-8.985,0.235]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[956.434,254.705],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 112","np":2,"cix":2,"bm":0,"ix":112,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-10.24],[16.7,0],[0,0],[0,8.47],[0,6.7],[0,7.41],[-14.51,0.39],[0,-7.15],[0,-6.36]],"o":[[0,8.47],[0,0],[-16.71,0],[0,-10.24],[0,-6.36],[0,-7.16],[14.5,0.39],[0,7.41],[0,6.7]],"v":[[19.585,14.995],[0.295,32.635],[-0.295,32.635],[-19.585,14.995],[-11.115,-4.415],[-17.475,-19.245],[0.005,-32.635],[17.465,-19.245],[11.115,-4.415]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,374.605],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 113","np":2,"cix":2,"bm":0,"ix":113,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,14.47],[0,14.83],[-7.06,0],[0,0],[0,-11.64],[0,-17.65]],"o":[[0,0],[0,0],[0,-17.65],[0,-11.64],[0,0],[7.06,0],[0,14.83],[0,14.47]],"v":[[17.235,32.12],[-17.235,32.12],[-10.175,15.18],[-21.115,-15.18],[-4.885,-32.12],[4.885,-32.12],[21.115,-15.18],[10.175,15.18]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,476.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 114","np":2,"cix":2,"bm":0,"ix":114,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.45],[5.46,0],[0,-5.46],[-5.46,0]],"o":[[0,-5.46],[-5.46,0],[0,5.45],[5.46,0]],"v":[[9.88,-6.995],[0,-16.885],[-9.88,-6.995],[0,2.885]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.11,0.04],[0,0],[0.04,0.01],[1.23,0],[0,0],[0,0],[0.93,-0.3],[0.09,-0.03],[-0.02,0.08],[2.81,3.52],[1.38,1.58],[-0.95,5.6],[-4.67,2.86],[-0.17,0.1],[-2.01,0.17],[-0.57,-0.05],[-0.05,0],[0,0],[-2.26,-1.29],[-0.04,-0.02],[-0.95,-5.6],[3.73,-4.3],[1.32,-1.64],[-0.88,-4.42]],"o":[[0,0],[-0.03,-0.01],[-1.09,-0.43],[0,0],[0,0],[-1.02,0],[-0.08,0.02],[-0.06,0],[0.88,-4.42],[-1.31,-1.64],[-3.72,-4.3],[0.92,-5.41],[0.16,-0.11],[1.76,-1.01],[0.57,-0.05],[0.05,0],[0,0],[2.6,-0.27],[0.04,0.02],[4.93,2.82],[0.95,5.6],[-1.37,1.58],[-2.81,3.52],[0.03,0.14]],"v":[[5.31,24.415],[5.25,24.585],[5.15,24.545],[1.65,23.885],[0.82,23.885],[-2.24,23.885],[-5.18,24.345],[-5.43,24.425],[-5.5,24.305],[-8.6,11.585],[-12.92,7.005],[-17.38,-8.885],[-8.44,-22.105],[-7.94,-22.415],[-2.21,-24.325],[-0.5,-24.325],[-0.36,-24.315],[0.36,-24.315],[7.83,-22.475],[7.94,-22.415],[17.38,-8.885],[12.92,7.005],[8.6,11.585],[5.51,24.305]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.919,298.655],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 115","np":4,"cix":2,"bm":0,"ix":115,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.98,1.91],[3.25,-0.78],[0.95,-1.71],[0.23,-1.94],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,-2.21],[-1.22,-2.36],[-1.92,0.46],[-0.94,1.72],[0,0],[0,0],[0,0],[0,0]],"v":[[7.295,-10.055],[7.295,10.105],[7.285,10.105],[6.065,3.655],[-1.245,0.435],[-5.775,3.895],[-7.295,9.525],[-7.295,-9.865],[-7.295,-10.105],[7.295,-10.105]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[962.214,640.175],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 116","np":2,"cix":2,"bm":0,"ix":116,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.21],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.94,1.72],[-1.92,0.46],[-1.22,-2.36]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.23,-1.94],[0.95,-1.71],[3.25,-0.78],[0.98,1.91]],"v":[[7.285,-20.405],[7.295,-20.405],[7.295,30.405],[7.295,30.855],[-7.295,30.855],[-7.295,30.215],[-7.295,-20.405],[-7.295,-20.985],[-5.775,-26.615],[-1.245,-30.075],[6.065,-26.855]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[962.214,670.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 117","np":2,"cix":2,"bm":0,"ix":117,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.88,-2.4],[2.65,-2.3],[3.18,-3.18],[0.76,-3.76],[0,0],[-4.26,6.98],[-2.86,0.33]],"o":[[0.68,1.84],[-3.76,3.25],[-2.68,2.68],[0,0],[0.47,-8.38],[1.92,-2.74],[2.54,-0.29]],"v":[[9.725,-10.67],[7.765,-3.4],[-0.705,4.36],[-6.325,14.19],[-10.415,13.54],[-3.675,-8.54],[3.385,-13.9]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[962.444,260.12],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 118","np":2,"cix":2,"bm":0,"ix":118,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.02,0.49],[0,0],[-2.42,-5.11],[0,0],[0,0],[0,0],[4.7,3.8],[0,0],[-1.11,0],[0,0]],"o":[[0,0],[-4.53,3.78],[0,0],[0,0],[0,0],[2.58,-5.18],[0,0],[0.96,0.42],[0,0],[1.2,0]],"v":[[26.06,-8.355],[26.37,-7.995],[22.63,7.955],[21.17,8.355],[-22.13,8.355],[-22.58,8.135],[-26.37,-8.115],[-26.31,-8.245],[-23.19,-7.585],[22.7,-7.585]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.869,724.655],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 119","np":2,"cix":2,"bm":0,"ix":119,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.11,0],[0,-6.11],[6.11,0],[0,6.11]],"o":[[6.11,0],[0,6.11],[-6.11,0],[0,-6.11]],"v":[[0,-11.06],[11.06,0],[0,11.06],[-11.06,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[966.209,826.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 120","np":2,"cix":2,"bm":0,"ix":120,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.6,0],[0,0],[0,-6.6],[0,0],[-6.6,0],[0,0],[0,6.6],[0,0]],"o":[[0,0],[-6.6,0],[0,0],[0,6.6],[0,0],[-6.6,0],[0,0],[0,-6.6]],"v":[[-3.5,-12.355],[15.5,-12.355],[3.5,-0.355],[3.5,0.355],[15.5,12.355],[-3.5,12.355],[-15.5,0.355],[-15.5,-0.355]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[959.889,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 121","np":2,"cix":2,"bm":0,"ix":121,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-4.27],[1.41,-1.41],[0.79,-0.38],[1.2,0],[0,0],[0.96,0.42],[0,3.16],[-1.41,1.4],[-2.13,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.27,0],[0,2.14],[-0.61,0.62],[-1.02,0.49],[0,0],[-1.11,0],[-2.73,-1.21],[0,-2.14],[1.41,-1.41],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[22.945,-7.765],[30.705,-0.005],[28.425,5.485],[26.305,6.995],[22.945,7.765],[-22.945,7.765],[-26.065,7.105],[-30.705,-0.005],[-28.425,-5.485],[-22.945,-7.765],[-21.885,-7.765],[-7.295,-7.765],[7.295,-7.765],[21.885,-7.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,709.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 122","np":2,"cix":2,"bm":0,"ix":122,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-4.27],[1.41,-1.41],[2.14,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,4.27],[-1.41,1.4],[-2.13,0]],"o":[[4.27,0],[0,2.14],[-1.4,1.41],[0,0],[0,0],[0,0],[0,0],[0,0],[-4.27,0],[0,-2.14],[1.41,-1.41],[0,0]],"v":[[22.945,-7.765],[30.705,-0.005],[28.425,5.485],[22.945,7.765],[21.885,7.765],[7.295,7.765],[-7.295,7.765],[-21.885,7.765],[-22.945,7.765],[-30.705,-0.005],[-28.425,-5.485],[-22.945,-7.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,622.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 123","np":2,"cix":2,"bm":0,"ix":123,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.14,-0.01],[0,-4.13],[1.41,-1.41],[2.14,0],[0,0],[0,4.27],[-1.41,1.4],[-1.96,0.11],[-0.14,0],[0,0]],"o":[[4.08,0.22],[0,2.14],[-1.4,1.41],[0,0],[-4.27,0],[0,-2.14],[1.32,-1.32],[0.14,-0.01],[0,0],[0.14,0]],"v":[[23.365,-7.755],[30.705,-0.005],[28.425,5.485],[22.945,7.765],[-22.945,7.765],[-30.705,-0.005],[-28.425,-5.485],[-23.365,-7.755],[-22.945,-7.765],[22.945,-7.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,606.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 124","np":2,"cix":2,"bm":0,"ix":124,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-4.27],[1.41,-1.41],[2.14,0],[0,0],[0,4.27],[-1.41,1.4],[-2.13,0],[0,0],[0,0]],"o":[[4.27,0],[0,2.14],[-1.4,1.41],[0,0],[-4.27,0],[0,-2.14],[1.41,-1.41],[0,0],[0,0],[0,0]],"v":[[22.945,-7.765],[30.705,-0.005],[28.425,5.485],[22.945,7.765],[-22.945,7.765],[-30.705,-0.005],[-28.425,-5.485],[-22.945,-7.765],[-17.235,-7.765],[17.235,-7.765]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,516.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 125","np":2,"cix":2,"bm":0,"ix":125,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.43,-6.53],[0,0],[0,0],[0,0],[-0.76,16.39],[0,0],[0,0],[-1.44,-8.37]],"o":[[0,0],[0,0],[0,0],[-5.04,-15.62],[0,0],[0,0],[-0.04,8.5],[1.44,8.38]],"v":[[13.5,24.395],[13.5,24.645],[-6.25,24.645],[-6.25,23.895],[-12.74,-24.645],[2.26,-24.645],[2.26,-24.205],[3.63,1.215]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[965.739,894.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 126","np":2,"cix":2,"bm":0,"ix":126,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,3.24],[-1.07,1.07],[-1.07,0.25],[-0.47,0],[0,0],[-0.49,-0.15],[0,-2.7],[1.07,-1.07],[1.62,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-3.23,0],[0,-1.62],[0.75,-0.76],[0.44,-0.11],[0,0],[0.54,0],[2.49,0.67],[0,1.62],[-1.07,1.07],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-35.065,5.885],[-36.005,5.885],[-41.885,-0.005],[-40.155,-4.155],[-37.375,-5.715],[-36.005,-5.885],[35.995,-5.885],[37.545,-5.665],[41.885,-0.005],[40.155,4.155],[35.995,5.885],[35.705,5.885],[20.375,5.885],[5.375,5.885],[-3.415,5.885],[-18.415,5.885]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,864.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 127","np":2,"cix":2,"bm":0,"ix":127,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.34,0.07],[0,2.89],[-1.07,1.07],[-0.89,0.29],[-0.63,0],[0,0],[0,0],[0,-3.23],[1.07,-1.07],[1.1,-0.25],[0.45,0],[0,0]],"o":[[-2.75,-0.48],[0,-1.62],[0.65,-0.65],[0.57,-0.19],[0,0],[0,0],[3.24,0],[0,1.62],[-0.77,0.77],[-0.42,0.1],[0,0],[-0.35,0]],"v":[[-37.035,5.785],[-41.885,-0.005],[-40.155,-4.155],[-37.815,-5.595],[-36.005,-5.885],[-23.655,-5.885],[35.995,-5.885],[41.885,-0.005],[40.155,4.155],[37.295,5.735],[35.995,5.885],[-36.005,5.885]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,788.305],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 128","np":2,"cix":2,"bm":0,"ix":128,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0.14,0],[0,0],[0.14,-0.01],[0,0],[10.93,17.89],[2.64,1.86],[1.63,-0.27],[0.74,0.73],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-20.83,20.47],[0,0],[-0.14,-0.01],[0,0],[-0.14,0],[0,0],[0,0],[1.33,-2.82],[-1.46,-1.03],[-0.68,-0.74],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[41.725,-24.18],[41.725,-23.48],[23.365,24.17],[23.365,24.18],[22.945,24.17],[-22.945,24.17],[-23.365,24.18],[-23.365,24.17],[-32.625,-12.04],[-34.775,-20.17],[-39.585,-21.27],[-41.725,-23.48],[-41.725,-24.18],[-31.235,-24.18],[-11.235,-24.18],[8.765,-24.18],[27.765,-24.18]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.624,574.37],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 129","np":2,"cix":2,"bm":0,"ix":129,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.28,0],[0,0],[0.7,0],[0,0],[0,0],[0,6.6],[0,0],[-6.6,0],[0,0],[-0.64,-0.11],[0,0],[0,-6.32],[0,0]],"o":[[0,0],[-0.66,0.12],[0,0],[0,0],[-6.6,0],[0,0],[0,-6.6],[0,0],[0.67,0],[0,0],[-6.28,0],[0,0],[0,6.32]],"v":[[14.655,11.645],[14.755,12.175],[12.715,12.355],[11.205,12.355],[-2.755,12.355],[-14.755,0.355],[-14.755,-0.355],[-2.755,-12.355],[12.715,-12.355],[14.685,-12.185],[14.655,-12.005],[3.245,-0.515],[3.245,0.155]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[978.144,537.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 130","np":2,"cix":2,"bm":0,"ix":130,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.79,-2.62],[0.4,-7.63],[6.45,-4.09],[-0.04,-0.34],[-0.02,-0.04],[0,0],[0,0],[0,0],[-0.28,1.61],[1.33,0.96],[2.96,0.16],[1.26,0.63],[1.65,0.13],[0.75,-1.24],[-0.77,-1.23],[0,0],[0.28,5.45],[-0.39,1.79],[0,0],[-0.7,-1.77],[-2.51,1.25],[-1.39,3.04],[-3.99,1.43],[-2.12,1.72],[0.86,2.6],[2.66,-1.87],[-0.45,0.91],[0,0],[0,0],[0,0],[-1.08,-0.94]],"o":[[6.71,3.67],[-0.39,7.63],[-0.29,0.19],[0,0.04],[0,0],[0,0],[0,0],[2.4,-0.42],[0.28,-1.62],[-2.4,-1.73],[-1.4,-0.07],[-1.48,-0.73],[-1.45,-0.1],[-0.75,1.25],[0,0],[-3.72,-4.02],[-0.1,-1.82],[0,0],[-0.44,1.88],[1.03,2.61],[3,-1.48],[1.75,-3.86],[2.57,-0.92],[2.12,-1.73],[-0.81,-2.4],[0.72,-0.75],[0,0],[0,0],[0,0],[0.59,1.25],[4.14,3.57]],"v":[[39.765,-14.835],[50.085,4.295],[38.685,23.175],[38.095,23.965],[38.135,24.085],[35.525,24.905],[-24.125,24.905],[-24.125,24.555],[-20.945,20.775],[-22.705,16.445],[-31.375,15.585],[-35.435,14.525],[-39.935,12.555],[-43.615,14.455],[-43.575,18.595],[-43.985,18.975],[-50.385,4.295],[-49.935,-1.145],[-49.585,-1.075],[-49.385,4.515],[-42.635,7.735],[-38.285,-0.985],[-28.325,-8.315],[-20.955,-11.795],[-18.255,-19.015],[-24.555,-22.215],[-22.805,-24.725],[-22.355,-24.505],[20.945,-24.505],[22.405,-24.905],[24.915,-21.585]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[948.094,757.515],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 131","np":2,"cix":2,"bm":0,"ix":131,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.45,-0.63],[0,0],[3.6,-0.28],[0.54,0],[0,0],[0.44,-0.11],[4.84,5.84],[0,0],[-3.43,4.89],[0,0],[-7.33,0],[-4,5.27],[0,0],[-7.36,0],[-4,5.24],[0,0]],"o":[[0,0],[-5.12,6.33],[-0.49,-0.15],[0,0],[-0.47,0],[-3.59,-0.54],[0,0],[6.19,-0.83],[0,0],[3.97,5.53],[7.12,0],[0,0],[3.97,5.56],[7.1,0],[0,0],[3.58,5]],"v":[[51.96,-0.605],[52.09,-0.495],[37.07,9.835],[35.52,9.615],[-36.48,9.615],[-37.85,9.785],[-52.09,-0.125],[-50.94,-0.695],[-35.96,-9.835],[-35.67,-9.635],[-17.89,-0.505],[-0.44,-9.175],[0.28,-9.695],[18.11,-0.505],[35.52,-9.125],[36.3,-9.665]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[948.099,848.805],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 132","np":2,"cix":2,"bm":0,"ix":132,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.73,-7.46],[0,0],[4,-5.29],[0,0],[7.09,0],[3.99,-5.39],[0,0],[7.27,0],[3.99,-5.39],[0,0],[6.81,0.36],[0,0],[-3.12,0.24],[-0.35,0],[0,0],[-0.42,0.1],[0,0]],"o":[[0,0],[-7.14,0],[0,0],[-4,-5.23],[-7.22,0],[0,0],[-3.98,-5.46],[-7.22,0],[0,0],[-3.76,-5.19],[0,0],[5.44,-6.73],[0.34,0.07],[0,0],[0.45,0],[0,0],[3,0]],"v":[[53.115,1.16],[53.075,1.19],[36.535,9.43],[36.135,9.66],[18.015,0.72],[0.405,9.6],[-0.295,9.72],[-17.985,0.72],[-35.595,9.6],[-36.255,9.78],[-52.805,0.75],[-53.115,0.51],[-37.605,-9.73],[-36.575,-9.63],[35.425,-9.63],[36.725,-9.78],[36.735,-9.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.913725550034,0.427451010311,0.949019667682,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[948.194,803.82],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 133","np":2,"cix":2,"bm":0,"ix":133,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.93],[0,0],[5.64,-0.97],[0,0],[0,6.32],[0,0],[-6.28,0],[0,0]],"o":[[0,0],[0,5.9],[0,0],[-6.28,0],[0,0],[0,-6.32],[0,0],[5.67,0.94]],"v":[[10.735,-0.35],[10.735,0.36],[0.775,12.18],[0.675,11.65],[-10.735,0.16],[-10.735,-0.51],[0.675,-12],[0.705,-12.18]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[992.124,537.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 134","np":2,"cix":2,"bm":0,"ix":134,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,6.11],[6.11,0],[0,-6.11],[-6.11,0]],"o":[[0,-6.11],[-6.11,0],[0,6.11],[6.11,0]],"v":[[-6.69,-0.085],[-17.75,-11.145],[-28.81,-0.085],[-17.75,10.975]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,6.11],[6.11,0],[0,-6.11],[-6.11,0]],"o":[[0,-6.11],[-6.11,0],[0,6.11],[6.11,0]],"v":[[29.31,-0.085],[18.25,-11.145],[7.19,-0.085],[18.25,10.975]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[6.19,-0.83],[0,0],[1.52,4.76],[0,0],[-1.72,0],[0,6.11],[6.11,0],[1.33,-0.57],[0,0],[-2.53,3.13],[0,0],[-3.76,-5.19],[0,0],[-7.22,0],[-3.98,-5.46],[0,0],[-7.22,0],[-4,-5.23],[0,0],[-7.14,0],[0,0],[-1.26,-4.4],[0,0],[1.53,0],[0,-6.11],[-6.11,0],[-1.32,0.56],[0,0],[2.62,-3.24],[0,0],[3.58,5],[0,0],[7.1,0],[3.97,5.56],[0,0],[7.12,0],[3.97,5.53]],"o":[[-3.43,4.89],[0,0],[-2.79,-3.36],[0,0],[1.46,0.71],[6.11,0],[0,-6.11],[-1.54,0],[0,0],[1.35,-4.67],[0,0],[6.81,0.36],[0,0],[3.99,-5.39],[7.27,0],[0,0],[3.99,-5.39],[7.09,0],[0,0],[4,-5.29],[0,0],[2.34,3.04],[0,0],[-1.32,-0.56],[-6.11,0],[0,6.11],[1.53,0],[0,0],[-1.47,4.51],[0,0],[-6.45,-0.63],[0,0],[-4,5.24],[-7.36,0],[0,0],[-4,5.27],[-7.33,0],[0,0]],"v":[[-35.82,12.465],[-50.8,21.605],[-51.95,22.175],[-58.72,9.925],[-58.56,9.875],[-53.75,10.975],[-42.69,-0.085],[-53.75,-11.145],[-58.09,-10.255],[-58.96,-10.495],[-52.88,-22.175],[-52.57,-21.935],[-36.02,-12.905],[-35.36,-13.085],[-17.75,-21.965],[-0.06,-12.965],[0.64,-13.085],[18.25,-21.965],[36.37,-13.025],[36.77,-13.255],[53.31,-21.495],[53.35,-21.525],[58.96,-10.385],[58.55,-10.275],[54.25,-11.145],[43.19,-0.085],[54.25,10.975],[58.55,10.105],[58.62,10.125],[52.23,21.805],[52.1,21.695],[36.44,12.635],[35.66,13.175],[18.25,21.795],[0.42,12.605],[-0.3,13.125],[-17.75,21.795],[-35.53,12.665]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.959,826.505],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 135","np":5,"cix":2,"bm":0,"ix":135,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.08,-3.32],[1.15,-3.47],[0,0],[1.53,0],[0,6.11],[-6.11,0],[-1.32,-0.56],[0,0]],"o":[[0.1,4.1],[0,0],[-1.32,0.56],[-6.11,0],[0,-6.11],[1.53,0],[0,0],[0.78,2.76]],"v":[[8.51,-1.18],[6.82,10.21],[6.75,10.19],[2.45,11.06],[-8.61,0],[2.45,-11.06],[6.75,-10.19],[7.16,-10.3]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.443137284821,0.003921568627,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[999.759,826.42],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 136","np":2,"cix":2,"bm":0,"ix":136,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-12.99,-0.42],[0,0],[0,0],[0,0],[0,0],[1.44,8.38],[-0.04,8.5],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-5.43,-6.53],[-1.44,-8.37],[0,0],[0,0],[0,0],[0,0],[0,34.64]],"v":[[25.675,24.505],[25.675,24.645],[25.545,24.645],[-14.365,24.645],[-14.365,24.395],[-24.235,1.215],[-25.605,-24.205],[-25.605,-24.645],[-10.275,-24.645],[-10.275,-24.415],[-10.275,-17.825]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.560784313725,0.188235309077,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[993.604,894.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 137","np":2,"cix":2,"bm":0,"ix":137,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[5.46,0],[0,0],[1.53,4.88],[0,0]],"o":[[0,0],[-1.44,5.01],[0,0],[-5.36,0],[0,0],[0,0]],"v":[[82.555,-4.415],[83.025,-4.285],[71.495,4.415],[-71.565,4.415],[-83.025,-4.025],[-81.295,-4.415]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.129411764706,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.654,939.775],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 138","np":2,"cix":2,"bm":0,"ix":138,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-6.56],[0,0],[0.31,-1.05],[0,0],[0,0],[0,0],[0,1.24],[0,0],[-6.6,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,1.14],[0,0],[0,0],[0,0],[-0.35,-1.13],[0,0],[0,-6.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[6.54,0.07]],"v":[[83.53,3.865],[83.53,4.575],[83.06,7.875],[82.59,7.745],[-81.26,7.745],[-82.99,8.135],[-83.53,4.575],[-83.53,3.865],[-71.53,-8.135],[-29.66,-8.135],[-9.9,-8.135],[11.87,-8.135],[31.62,-8.135],[71.53,-8.135],[71.66,-8.135]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949019667682,0.341176470588,0.188235309077,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[947.619,927.615],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 139","np":2,"cix":2,"bm":0,"ix":139,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0}]},{"id":"comp_2","nm":"Earth","fr":24,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"earth ol Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[965.53,543.11,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.017,-5.05],[-0.008,-0.037]],"o":[[0.512,5.126],[0,0.037],[0,0]],"v":[[-1.089,-7.68],[1.073,7.569],[1.089,7.68]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1130.189,759.852],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.808,2.078]],"o":[[-4.101,-0.053],[0,0]],"v":[[3.201,2.239],[-3.201,-2.238]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1305.512,830.125],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.809,-2.078]],"o":[[4.101,0.053],[0,0]],"v":[[-3.263,-2.418],[3.263,2.418]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1294.241,837.573],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.293,-0.017],[0,0],[-0.033,2.587],[0.833,0.864],[1.294,0.017],[0,0],[0.033,-2.578],[-0.842,-0.864]],"o":[[0,0],[2.587,0.033],[0.017,-1.284],[-0.843,-0.864],[0,0],[-2.587,-0.033],[-0.016,1.293],[0.842,0.855]],"v":[[-6.184,4.614],[6.063,4.771],[10.82,0.134],[9.487,-3.195],[6.183,-4.614],[-6.064,-4.771],[-10.821,-0.143],[-9.487,3.195]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1327.146,822.071],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.034,2.587],[-0.855,0.833],[-1.294,-0.017],[0,0],[-0.838,-1.194]],"o":[[0,0],[-2.578,-0.033],[0.016,-1.294],[0.864,-0.842],[0,0],[1.559,0.02],[0,0]],"v":[[6.26,4.829],[-13.005,4.582],[-17.632,-0.175],[-16.214,-3.469],[-12.884,-4.812],[13.885,-4.469],[17.666,-2.457]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1284.498,830.323],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.062,-4.853],[3.403,0.043]],"o":[[0,0],[7.66,0.098],[-0.048,3.725],[0,0]],"v":[[-6.824,-4.684],[-2.989,-4.635],[6.762,0.509],[0.553,4.641]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1316.352,837.159],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[1.088,1.005],[0.036,0.037]],"o":[[0,0],[0,0],[-1.807,-0.023],[-0.046,-0.028],[0,0]],"v":[[10.085,0.987],[9.434,0.979],[-5.446,0.788],[-9.966,-0.885],[-10.084,-0.987]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1307.471,840.876],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.808,-2.079]],"o":[[4.101,0.053],[0,0]],"v":[[-3.201,-2.234],[3.201,2.234]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1161.992,779.403],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.809,2.069]],"o":[[-4.101,-0.053],[0,0]],"v":[[3.263,2.414],[-3.263,-2.413]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1173.263,771.956],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.293,0.017],[0,0],[-0.033,2.578],[-0.855,0.842],[-1.293,-0.017],[0,0],[0.033,-2.587],[0.855,-0.842]],"o":[[0,0],[-2.578,-0.033],[0.017,-1.294],[0.864,-0.834],[0,0],[2.578,0.033],[-0.016,1.284],[-0.864,0.842]],"v":[[6.068,4.776],[-6.188,4.619],[-10.816,-0.138],[-9.397,-3.442],[-6.068,-4.776],[6.188,-4.619],[10.816,0.138],[9.397,3.432]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1197.827,796.828],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.033,-2.578],[0.864,-0.842],[1.285,0.016],[0,0],[0.838,1.194]],"o":[[0,0],[2.578,0.033],[-0.016,1.284],[-0.864,0.842],[0,0],[-1.559,-0.02],[0,0]],"v":[[-6.26,-4.828],[13.005,-4.581],[17.632,0.176],[16.214,3.47],[12.884,4.813],[-13.885,4.47],[-17.666,2.458]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1183.006,779.2],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.098,7.614],[-3.197,0.307],[-0.11,-0.001]],"o":[[0,0],[0,0],[-7.66,-0.098],[0.058,-4.541],[0.101,-0.008],[0,0]],"v":[[18.09,12.534],[17.503,12.526],[-8.404,12.194],[-17.992,-2.077],[-12.986,-12.518],[-12.674,-12.533]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1141.289,764.643],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.088,-1.015],[-0.036,-0.037]],"o":[[0,0],[1.807,0.023],[0.045,0.028],[0,0]],"v":[[-19.419,-1.112],[14.781,-0.672],[19.301,1.009],[19.419,1.112]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1150.7,768.533],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.861,-2.031]],"o":[[-4.101,-0.053],[0,0]],"v":[[3.262,-2.125],[-3.262,2.177]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1295.208,728.841],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.787,2.014],[-0.038,0.037]],"o":[[4.027,0.052],[0.028,-0.045],[0,0]],"v":[[-3.324,2.308],[3.221,-2.242],[3.324,-2.36]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1284.128,721.155],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.293,-0.017],[0,0],[-0.033,2.577],[0.843,0.864],[1.284,0.017],[0,0],[0.033,-2.587],[-0.843,-0.864]],"o":[[0,0],[2.578,0.033],[0.017,-1.294],[-0.842,-0.855],[0,0],[-2.587,-0.033],[-0.016,1.284],[0.842,0.864]],"v":[[-6.184,4.614],[6.063,4.771],[10.82,0.144],[9.477,-3.195],[6.183,-4.614],[-6.064,-4.771],[-10.821,-0.134],[-9.487,3.195]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1267.693,744.613],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.033,-2.587],[-0.843,-0.864],[-1.294,-0.017],[0,0],[-0.878,1.172]],"o":[[0,0],[-2.578,-0.033],[-0.017,1.284],[0.833,0.864],[0,0],[1.569,0.02],[0,0]],"v":[[-0.845,-4.708],[-5.597,-4.769],[-10.354,-0.132],[-9.011,3.197],[-5.717,4.625],[6.529,4.782],[10.371,2.868]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1281.438,728.168],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.033,2.578],[0.842,0.864],[1.293,0.016],[0,0],[0.875,-1.035]],"o":[[0,0],[2.587,0.033],[0.017,-1.294],[-0.843,-0.855],[0,0],[-1.449,-0.019],[0,0]],"v":[[-5.427,4.628],[12.003,4.852],[16.76,0.215],[15.427,-3.124],[12.124,-4.542],[-13.132,-4.866],[-16.777,-3.197]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1304.108,722.092],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.101,0.053],[0,0],[-0.098,7.614],[-3.197,0.308],[0,0],[-1.018,-5.051],[0,0],[0,0],[-1.088,-1.014],[-4.101,-0.053],[0,0],[0,0],[0.033,-2.578],[0.864,-0.843],[1.285,0.017],[0,0],[0.838,1.194],[0,0]],"o":[[0,0],[-7.661,-0.098],[0.058,-4.541],[0,0],[0.513,5.127],[0,0],[0,0],[1.807,0.024],[1.809,2.07],[0,0],[0,0],[2.578,0.034],[-0.016,1.284],[-0.864,0.842],[0,0],[-1.56,-0.02],[0,0],[-1.808,-2.079]],"v":[[-3.143,9.092],[-29.049,8.76],[-38.639,-5.511],[-33.632,-15.953],[-32.835,-15.906],[-30.672,-0.656],[-30.655,-0.656],[3.546,-0.218],[8.066,1.464],[14.592,6.292],[14.812,6.294],[34.077,6.541],[38.703,11.299],[37.286,14.593],[33.956,15.935],[7.188,15.592],[3.406,13.58],[3.259,13.56]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1161.935,768.077],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.033,-2.587],[0.855,-0.842],[1.293,0.016],[0,0],[-0.033,2.577],[-0.855,0.843],[-1.294,-0.017]],"o":[[2.578,0.033],[-0.017,1.284],[-0.864,0.842],[0,0],[-2.577,-0.033],[0.016,-1.294],[0.864,-0.833],[0,0]],"v":[[6.188,-4.618],[10.816,0.139],[9.397,3.433],[6.068,4.776],[-6.189,4.619],[-10.816,-0.138],[-9.397,-3.442],[-6.068,-4.775]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1197.828,796.828],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.842,-0.855],[0.016,-1.294],[2.577,0.033],[0,0],[0.842,0.864],[-0.017,1.284],[-2.587,-0.033],[0,0]],"o":[[0.842,0.864],[-0.033,2.577],[0,0],[-1.294,-0.016],[-0.843,-0.865],[0.033,-2.587],[0,0],[1.284,0.017]],"v":[[9.478,-3.195],[10.821,0.144],[6.064,4.771],[-6.183,4.614],[-9.486,3.196],[-10.82,-0.134],[-6.063,-4.771],[6.184,-4.614]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1267.692,744.613],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":2,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.787,2.014],[0,0],[-1.45,-0.018],[0,0],[-0.842,-0.855],[0.016,-1.293],[2.587,0.033],[0,0],[0,0],[1.861,-2.031],[0,0],[1.569,0.02],[0,0],[0.833,0.864],[-0.017,1.284],[-2.578,-0.033],[0,0],[0,0]],"o":[[0,0],[0.876,-1.034],[0,0],[1.293,0.017],[0.842,0.864],[-0.034,2.578],[0,0],[0,0],[-4.1,-0.053],[0,0],[-0.878,1.172],[0,0],[-1.293,-0.017],[-0.843,-0.864],[0.033,-2.587],[0,0],[0,0],[4.027,0.051]],"v":[[-8.627,-6.176],[-8.645,-6.195],[-4.999,-7.864],[20.256,-7.54],[23.559,-6.12],[24.893,-2.783],[20.135,1.854],[2.705,1.631],[2.494,1.628],[-4.029,5.93],[-4.167,5.948],[-8.009,7.861],[-20.256,7.704],[-23.549,6.276],[-24.892,2.948],[-20.135,-1.69],[-15.383,-1.629],[-15.172,-1.625]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1295.976,725.089],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":2,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.062,-4.853],[3.403,0.043],[0,0],[0,0],[1.088,1.005],[4.101,0.052],[0,0],[0,0],[-0.033,2.587],[-0.855,0.833],[-1.294,-0.017],[0,0],[-0.838,-1.194],[0,0],[-4.101,-0.053],[0,0],[0,0]],"o":[[-0.048,3.725],[0,0],[0,0],[-1.807,-0.023],[-1.809,-2.078],[0,0],[0,0],[-2.578,-0.033],[0.017,-1.294],[0.864,-0.842],[0,0],[1.56,0.02],[0,0],[1.808,2.078],[0,0],[0,0],[7.66,0.098]],"v":[[28.11,3.993],[21.901,8.125],[21.9,8.18],[7.02,7.99],[2.5,6.316],[-4.026,1.48],[-4.246,1.477],[-23.511,1.23],[-28.139,-3.526],[-26.72,-6.821],[-23.39,-8.164],[3.378,-7.821],[7.16,-5.808],[7.307,-5.787],[13.709,-1.311],[14.524,-1.2],[18.359,-1.151]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1295.004,833.674],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":2,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.842,-0.864],[0.017,-1.284],[2.587,0.033],[0,0],[0.843,0.855],[-0.017,1.293],[-2.587,-0.033],[0,0]],"o":[[0.833,0.864],[-0.033,2.587],[0,0],[-1.293,-0.017],[-0.842,-0.864],[0.033,-2.578],[0,0],[1.293,0.017]],"v":[[9.487,-3.195],[10.82,0.134],[6.063,4.771],[-6.184,4.614],[-9.487,3.195],[-10.82,-0.143],[-6.063,-4.771],[6.184,-4.614]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.941176530427,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1327.145,822.071],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":2,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.49,-0.436],[-8.167,-3.444],[-10.441,-10.07],[-3.116,-3.875],[-3.292,-5.905],[-2.306,-6.902],[-0.635,-10.642],[0.038,-2.926],[7.694,-15.454],[43.958,-2.088],[2.44,0.031],[2.594,0.208],[14.133,7.623],[10.903,21.977],[-0.249,19.43],[-12.476,18.493],[-2.005,2.516]],"o":[[2.547,0.271],[9,1.529],[13.589,5.707],[3.58,3.441],[4.227,5.229],[3.498,6.266],[3.289,9.713],[0.174,2.884],[-0.236,18.412],[-18.62,37.416],[-2.405,0.116],[-2.642,-0.034],[-16.875,-1.317],[-21.569,-11.654],[-8.076,-16.289],[0.308,-23.971],[1.806,-2.674],[0,0]],"v":[[12.641,-118.194],[20.197,-117.143],[46.011,-109.628],[82.323,-85.683],[92.376,-74.709],[103.676,-57.975],[112.432,-38.182],[118.398,-7.543],[118.607,1.176],[106.252,52.418],[5.859,118.036],[-1.409,118.163],[-9.268,117.805],[-56.132,104.01],[-106.125,52.254],[-118.396,-1.863],[-98.207,-66.546],[-92.482,-74.327]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1247.2,743.451],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":2,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.743,-3.61]],"o":[[4.303,-5.707],[0,0]],"v":[[-5.782,2.623],[5.782,3.083]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1253.217,621.989],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":2,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.973,-3.494]],"o":[[3.939,-5.968],[0,0]],"v":[[-5.786,2.984],[5.786,2.72]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1241.233,622.117],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":2,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.836,-2.825]],"o":[[2.17,-6.817],[0,0]],"v":[[-5.531,3.409],[5.531,0.008]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1209.979,628.488],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":2,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.285,-2.061],[-0.136,-0.103]],"o":[[1.151,-6.747],[0.155,0.094],[0,0]],"v":[[-5.243,3.636],[4.806,-1.575],[5.243,-1.276]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1198.961,633.545],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":2,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.349,-2.18],[0,0]],"o":[[0.752,-7.092],[0,0.009],[0,0]],"v":[[-5.077,3.874],[5.069,-1.694],[5.078,-1.684]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1188.594,638.966],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":2,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.016,0.156],[-3.385,-0.043],[-0.649,-0.219]],"o":[[-0.025,-0.165],[-0.636,-5.513],[0.707,0.009],[0,0]],"v":[[-3.847,4.174],[-3.914,3.696],[2.489,-4.131],[4.55,-3.793]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1166.519,656.456],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":2,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0.036],[-3.842,-0.902],[-0.064,-0.019]],"o":[[-0.009,-0.037],[-1.427,-6.79],[0.064,0.01],[0,0]],"v":[[-3.222,4.709],[-3.24,4.599],[4.484,-3.807],[4.667,-3.769]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1157.994,664.517],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":2,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.312,0.03],[0,0]],"o":[[0,0],[0.03,-2.321],[0,0],[0,0]],"v":[[5.531,12.937],[5.806,-8.575],[1.649,-12.84],[-5.837,-12.936]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1185.706,834.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":2,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.311,-0.03],[0,0]],"o":[[0,0],[-0.03,2.321],[0,0],[0,0]],"v":[[-2.543,-10.062],[-2.746,5.781],[1.401,10.046],[2.776,10.062]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1176.478,811.227],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":2,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.312,0.03],[0,0]],"o":[[0,0],[0.03,-2.312],[0,0],[0,0]],"v":[[15.818,2.396],[15.82,2.213],[11.663,-2.043],[-15.849,-2.396]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1158.098,798.098],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":2,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.321],[0,0]],"o":[[0,0],[-2.321,-0.03],[0,0],[0,0]],"v":[[2.267,-5.419],[2.084,-5.421],[-2.181,-1.265],[-2.267,5.451]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1226.88,774.692],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":2,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0]],"o":[[0,0],[-0.03,2.311],[0,0],[0,0],[0,0]],"v":[[-9.191,-15.282],[-9.526,10.836],[-5.378,15.091],[8.382,15.267],[9.557,15.283]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1233.826,795.911],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":2,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[2.321,0.029],[0,0]],"o":[[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"v":[[2.566,9.37],[2.577,8.48],[2.751,-5.088],[-1.405,-9.352],[-2.781,-9.37]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1244.988,820.612],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":2,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.029,2.311],[0,0]],"o":[[0,0],[2.312,0.03],[0,0],[0,0]],"v":[[-2.233,2.749],[-2.05,2.751],[2.215,-1.405],[2.233,-2.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1245.305,831.874],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":2,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.32],[0,0]],"o":[[0,0],[-2.312,-0.03],[0,0],[0,0]],"v":[[2.361,-13.106],[2.178,-13.108],[-2.078,-8.952],[-2.361,13.139]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1240.326,847.724],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":2,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.03,-2.312],[0,0]],"o":[[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0]],"v":[[15.727,-7.014],[15.25,-7.02],[-11.326,-7.361],[-15.591,-3.213],[-15.727,7.391]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1268.745,853.022],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":2,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.321],[0,0]],"o":[[0,0],[2.312,0.03],[0,0],[0,0]],"v":[[-2.233,2.749],[-2.05,2.751],[2.215,-1.405],[2.233,-2.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1286.044,843.241],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 42","np":2,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"o":[[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0]],"v":[[6.474,-15.07],[-1.874,-15.177],[-6.139,-11.02],[-6.473,15.042],[-6.475,15.207]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1294.805,825.418],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 43","np":2,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.321],[0,0]],"o":[[0,0],[2.321,0.03],[0,0],[0,0]],"v":[[-2.233,2.749],[-2.05,2.751],[2.215,-1.405],[2.233,-2.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1304.31,807.61],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 44","np":2,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.312,0.03],[0,0]],"o":[[0,0],[0.03,-2.312],[0,0],[0,0]],"v":[[2.426,14.852],[2.751,-10.569],[-1.406,-14.834],[-2.781,-14.852]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1304.117,789.334],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 45","np":2,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.312,-0.03],[0,0]],"o":[[0,0],[-0.03,2.312],[0,0],[0,0]],"v":[[-6.423,-2.28],[-6.426,-2.097],[-2.279,2.168],[6.455,2.28]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1294.073,772.211],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 46","np":2,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.312,0.03],[0,0]],"o":[[0,0],[0.03,-2.312],[0,0],[0,0]],"v":[[2.65,6.127],[2.751,-1.845],[-1.406,-6.11],[-2.781,-6.127]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1285.003,763.52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 47","np":2,"cix":2,"bm":0,"ix":47,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.321,-0.03],[0,0]],"o":[[0,0],[-0.03,2.312],[0,0],[0,0]],"v":[[-25.798,-2.524],[-25.8,-2.341],[-21.644,1.915],[25.83,2.524]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1255.732,754.823],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 48","np":2,"cix":2,"bm":0,"ix":48,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.311,-0.029],[0,0]],"o":[[0,0],[-0.03,2.312],[0,0],[0,0]],"v":[[-13.276,-2.368],[-13.278,-2.185],[-9.122,2.08],[13.308,2.368]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1339.861,793.36],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 49","np":2,"cix":2,"bm":0,"ix":49,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.276,-0.051],[0.026,-2.027],[0,0]],"o":[[0,0],[-0.285,-0.004],[-1.913,0.37],[0,0],[0,0]],"v":[[2.482,-22.495],[2.298,-22.497],[1.453,-22.426],[-1.958,-18.341],[-2.481,22.501]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1329.023,768.261],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 50","np":2,"cix":2,"bm":0,"ix":50,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.321],[0,0]],"o":[[0,0],[2.322,0.03],[0,0],[0,0]],"v":[[-2.233,2.749],[-2.05,2.751],[2.215,-1.405],[2.233,-2.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1334.416,743.109],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 51","np":2,"cix":2,"bm":0,"ix":51,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"o":[[0,0],[-2.321,-0.03],[0,0],[0,0],[0,0]],"v":[[2.283,-6.667],[2.1,-6.669],[-2.165,-2.522],[-2.277,6.221],[-2.283,6.698]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1338.962,734.106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 52","np":2,"cix":2,"bm":0,"ix":52,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.312,0.03],[0,0]],"o":[[0,0],[0.03,-2.312],[0,0],[0,0]],"v":[[8.634,2.309],[8.636,2.126],[4.489,-2.139],[-8.666,-2.308]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1350.628,729.702],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 53","np":2,"cix":2,"bm":0,"ix":53,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.009,-0.046],[-2.266,-0.029],[0,0]],"o":[[0,0],[-0.001,0.046],[0.036,2.249],[0,0],[0,0]],"v":[[-2.763,-2.229],[-2.766,-2.046],[-2.759,-1.907],[1.391,2.211],[2.767,2.229]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1362.059,733.735],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 54","np":2,"cix":2,"bm":0,"ix":54,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.383,-1.949],[0.003,-0.256],[0,0]],"o":[[0,0],[-2.054,-0.027],[-0.049,0.247],[0,0],[0,0]],"v":[[5.774,-2.655],[-1.492,-2.748],[-5.673,0.648],[-5.756,1.399],[-5.774,2.775]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1352.762,708.296],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 55","np":2,"cix":2,"bm":0,"ix":55,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.374,1.949],[-0.003,0.257],[0,0]],"o":[[0,0],[2.064,0.027],[0.049,-0.247],[0,0],[0,0]],"v":[[-2.229,2.751],[-2.055,2.753],[2.127,-0.652],[2.21,-1.404],[2.228,-2.78]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1344.86,711.724],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 56","np":2,"cix":2,"bm":0,"ix":56,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.321,-0.03],[0,0]],"o":[[0,0],[-0.03,2.311],[0,0],[0,0]],"v":[[-6.952,-6.88],[-7.072,2.496],[-2.915,6.751],[7.102,6.88]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1335.235,707.637],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 57","np":2,"cix":2,"bm":0,"ix":57,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"o":[[0,0],[0,0],[-2.312,-0.029],[0,0],[0,0],[0,0]],"v":[[3.889,-2.703],[3.815,-2.703],[0.393,-2.747],[-3.871,1.401],[-3.889,2.74],[-3.889,2.776]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1332.117,698.017],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 58","np":2,"cix":2,"bm":0,"ix":58,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.312],[0,0]],"o":[[0,0],[2.312,0.03],[0,0],[0,0]],"v":[[-2.233,2.744],[-2.05,2.746],[2.215,-1.401],[2.233,-2.777]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1337.98,692.64],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 59","np":2,"cix":2,"bm":0,"ix":59,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"o":[[0,0],[-2.321,-0.03],[0,0],[0,0],[0,0]],"v":[[5.017,-2.678],[-0.735,-2.752],[-5,1.405],[-5.016,2.68],[-5.017,2.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1345.138,688.558],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 60","np":2,"cix":2,"bm":0,"ix":60,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.276,0.051],[-0.026,2.018],[0,0]],"o":[[0,0],[0.294,0.004],[1.922,-0.37],[0,0],[0,0]],"v":[[-2.225,2.147],[-2.042,2.149],[-1.196,2.078],[2.223,-2.007],[2.225,-2.154]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1326.953,660.285],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 61","np":2,"cix":2,"bm":0,"ix":61,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.029,-2.311],[0,0]],"o":[[0,0],[-2.312,-0.03],[0,0],[0,0]],"v":[[2.233,-2.749],[2.05,-2.751],[-2.215,1.405],[-2.233,2.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1321.818,665.09],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 62","np":2,"cix":2,"bm":0,"ix":62,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.009,-0.055],[-2.265,-0.029],[0,0],[0,0]],"o":[[0,0],[-0.001,0.055],[0.054,2.239],[0,0],[0,0],[0,0]],"v":[[-2.763,-2.233],[-2.766,-2.05],[-2.759,-1.884],[1.391,2.215],[1.491,2.216],[2.767,2.233]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1322.298,669.755],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 63","np":2,"cix":2,"bm":0,"ix":63,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.321,0.03],[0,0]],"o":[[0,0],[0.03,-2.312],[0,0],[0,0]],"v":[[2.749,2.233],[2.751,2.05],[-1.405,-2.215],[-2.781,-2.233]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1326.571,674.232],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 64","np":2,"cix":2,"bm":0,"ix":64,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.321],[0,0]],"o":[[0,0],[2.321,0.03],[0,0],[0,0]],"v":[[-2.277,6.194],[-2.094,6.196],[2.171,2.04],[2.277,-6.226]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1337.178,675.068],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 65","np":2,"cix":2,"bm":0,"ix":65,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.311,-0.029],[0,0]],"o":[[0,0],[-0.03,2.312],[0,0],[0,0]],"v":[[-2.749,-2.233],[-2.751,-2.05],[1.405,2.215],[2.781,2.233]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1332.092,679.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 66","np":2,"cix":2,"bm":0,"ix":66,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.029,2.311],[0,0]],"o":[[0,0],[2.322,0.03],[0,0],[0,0]],"v":[[-2.241,3.419],[-2.058,3.421],[2.207,-0.735],[2.241,-3.451]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1290.866,637.53],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 67","np":2,"cix":2,"bm":0,"ix":67,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.276,-0.051],[0.026,-2.028],[0,0],[0,0]],"o":[[0,0],[-0.285,-0.004],[-1.913,0.37],[0,0],[0,0],[0,0]],"v":[[2.229,-2.763],[2.045,-2.764],[1.199,-2.694],[-2.211,1.393],[-2.219,2.034],[-2.229,2.768]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1285.608,643.619],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 68","np":2,"cix":2,"bm":0,"ix":68,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.321],[0,0]],"o":[[0,0],[2.312,0.03],[0,0],[0,0]],"v":[[-4.05,2.702],[-0.234,2.751],[4.031,-1.406],[4.049,-2.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1279.358,648.435],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 69","np":2,"cix":2,"bm":0,"ix":69,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.312,-0.029],[0,0],[0,0]],"o":[[0,0],[-0.03,2.32],[0,0],[0,0],[0,0]],"v":[[-2.612,-7.568],[-2.751,3.286],[1.406,7.549],[2.415,7.562],[2.781,7.568]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1272.896,643.465],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 70","np":2,"cix":2,"bm":0,"ix":70,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.108,0.247],[0.146,0.002],[0,0]],"o":[[0,0],[0.028,-2.165],[-0.146,-0.011],[0,0],[0,0]],"v":[[2.751,2.229],[2.753,2.046],[-0.974,-2.186],[-1.403,-2.21],[-2.78,-2.228]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1267.624,633.027],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 71","np":2,"cix":2,"bm":0,"ix":71,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.029,-2.312],[0,0],[0,0]],"o":[[0,0],[0,0],[-2.321,-0.029],[0,0],[0,0],[0,0]],"v":[[8.173,-2.597],[7.65,-2.604],[-3.89,-2.752],[-8.155,1.405],[-8.161,1.873],[-8.173,2.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1257.193,633.449],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 72","np":2,"cix":2,"bm":0,"ix":72,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.108,-0.247],[-0.147,-0.002],[0,0]],"o":[[0,0],[-0.028,2.165],[0.146,0.011],[0,0],[0,0]],"v":[[-2.75,-2.229],[-2.752,-2.046],[0.974,2.186],[1.405,2.21],[2.781,2.228]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1251.831,637.367],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 73","np":2,"cix":2,"bm":0,"ix":73,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.312,0.03],[0,0]],"o":[[0,0],[0.029,-2.321],[0,0],[0,0]],"v":[[2.637,6.614],[2.752,-2.331],[-1.405,-6.595],[-2.781,-6.614]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1257.906,646.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 74","np":2,"cix":2,"bm":0,"ix":74,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.32,0.029],[0,0]],"o":[[0,0],[-0.029,2.312],[0,0],[0,0]],"v":[[4.174,-2.432],[4.165,-1.753],[-0.099,2.404],[-4.173,2.351]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1256.406,655.28],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 75","np":2,"cix":2,"bm":0,"ix":75,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.312,-0.029],[0,0],[0,0]],"o":[[0,0],[-0.029,2.312],[0,0],[0,0],[0,0]],"v":[[-2.743,-2.476],[-2.752,-1.797],[1.405,2.458],[1.809,2.464],[2.781,2.476]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1250.424,655.149],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 76","np":2,"cix":2,"bm":0,"ix":76,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.275,-0.058],[0.026,-2.027],[0,0],[0,0]],"o":[[0,0],[0.284,0.003],[1.912,0.419],[0,0],[0,0],[0,0]],"v":[[-2.431,-3.513],[-1.752,-3.504],[-0.909,-3.411],[2.405,0.76],[2.375,3.091],[2.369,3.513]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1245.407,649.584],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 77","np":2,"cix":2,"bm":0,"ix":77,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-2.321,-0.029],[0,0]],"o":[[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"v":[[-3.793,8.533],[-3.791,8.377],[-3.628,-4.347],[0.637,-8.504],[3.793,-8.463]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1238.229,654.586],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 78","np":2,"cix":2,"bm":0,"ix":78,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.029,2.312],[0,0]],"o":[[0,0],[-2.312,-0.029],[0,0],[0,0]],"v":[[2.433,5.613],[1.754,5.604],[-2.403,1.349],[-2.313,-5.614]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1236.816,668.578],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 79","np":2,"cix":2,"bm":0,"ix":79,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.311,0.029],[0,0]],"o":[[0,0],[-0.029,2.312],[0,0],[0,0]],"v":[[5.618,-2.432],[5.609,-1.754],[1.345,2.404],[-5.618,2.313]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1245.416,671.985],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 80","np":2,"cix":2,"bm":0,"ix":80,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0]],"o":[[0,0],[0,0],[0.029,-2.321],[0,0],[0,0],[0,0]],"v":[[-5.613,2.428],[-5.61,2.171],[-5.604,1.758],[-1.34,-2.398],[4.807,-2.32],[5.614,-2.309]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1256.561,667.38],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 81","np":2,"cix":2,"bm":0,"ix":81,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.312,0.029],[0,0]],"o":[[0,0],[0.029,-2.321],[0,0],[0,0]],"v":[[4.438,4.375],[4.495,-0.047],[0.338,-4.311],[-4.524,-4.374]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1266.699,669.445],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 82","np":2,"cix":2,"bm":0,"ix":82,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.321],[0,0]],"o":[[0,0],[2.312,0.029],[0,0],[0,0]],"v":[[-4.428,8.644],[-0.006,8.701],[4.258,4.544],[4.428,-8.73]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1266.643,683.412],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 83","np":2,"cix":2,"bm":0,"ix":83,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-2.321,-0.03],[0,0]],"o":[[0,0],[0,0],[0.029,-2.321],[0,0],[0,0]],"v":[[-6.79,18.377],[-6.781,17.57],[-6.372,-14.19],[-2.109,-18.346],[6.791,-18.232]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1255.203,710.341],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 84","np":2,"cix":2,"bm":0,"ix":84,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.312],[0,0]],"o":[[0,0],[2.312,0.03],[0,0],[0,0]],"v":[[-2.672,4.032],[-1.645,4.045],[2.62,-0.112],[2.671,-4.075]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1245.741,732.792],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 85","np":2,"cix":2,"bm":0,"ix":85,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.312],[0,0]],"o":[[0,0],[-2.312,-0.03],[0,0],[0,0]],"v":[[2.607,4.524],[1.58,4.511],[-2.577,0.246],[-2.516,-4.524]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1240.196,732.297],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 86","np":2,"cix":2,"bm":0,"ix":86,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"o":[[0,0],[2.321,0.03],[0,0],[0,0],[0,0]],"v":[[-6.245,-5.305],[2.057,-5.198],[6.214,-0.933],[6.169,2.553],[6.134,5.305]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1231.456,725.219],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 87","np":2,"cix":2,"bm":0,"ix":87,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.321],[0,0]],"o":[[0,0],[2.339,0.03],[0,0],[0,0]],"v":[[-4.437,-8.799],[0.205,-8.74],[4.407,-4.474],[4.237,8.8]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1225.738,743.161],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 88","np":2,"cix":2,"bm":0,"ix":88,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.029,2.312],[0,0],[0,0]],"o":[[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0],[0,0]],"v":[[7.001,3.37],[4.524,3.338],[-2.815,3.244],[-6.972,-1.021],[-6.95,-2.727],[-6.941,-3.37]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1216.775,731.106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 89","np":2,"cix":2,"bm":0,"ix":89,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.029,2.321],[0,0]],"o":[[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0]],"v":[[7.006,6.686],[1.786,6.619],[-2.819,6.56],[-6.976,2.295],[-6.861,-6.686]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1227.179,762.569],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 90","np":2,"cix":2,"bm":0,"ix":90,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.029,-2.321],[0,0],[0,0]],"o":[[0,0],[0,0],[2.321,0.03],[0,0],[0,0],[0,0]],"v":[[-7.001,-6.282],[-4.625,-6.252],[2.815,-6.156],[6.972,-1.891],[6.908,3.044],[6.867,6.282]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1213.355,752.838],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 91","np":2,"cix":2,"bm":0,"ix":91,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.029,2.312],[0,0]],"o":[[0,0],[-2.312,-0.029],[0,0],[0,0]],"v":[[5.818,2.625],[-1.632,2.529],[-5.789,-1.735],[-5.777,-2.625]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1200.536,743.931],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 92","np":2,"cix":2,"bm":0,"ix":92,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.03,2.321],[0,0],[0,0],[0,0]],"v":[[-6.492,-4.075],[-6.497,-3.644],[-6.54,-0.305],[-2.393,3.96],[6.194,4.07],[6.57,4.075]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1169.369,715.235],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 93","np":2,"cix":2,"bm":0,"ix":93,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0]],"o":[[0,0],[0.03,-2.311],[0,0],[0,0],[0,0]],"v":[[-8.794,3.983],[-8.746,0.203],[-4.481,-3.953],[6.583,-3.811],[8.794,-3.783]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1218.628,723.753],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 94","np":2,"cix":2,"bm":0,"ix":94,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.03,2.312],[0,0]],"o":[[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0]],"v":[[4.63,10.632],[1.392,10.59],[-0.443,10.567],[-4.6,6.311],[-4.383,-10.632]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1153.658,687.725],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 95","np":2,"cix":2,"bm":0,"ix":95,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"o":[[0,0],[2.321,0.03],[0,0],[0,0],[0,0]],"v":[[-4.249,-6.155],[0.063,-6.1],[4.219,-1.835],[4.161,2.752],[4.117,6.155]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1179.811,725.516],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 96","np":2,"cix":2,"bm":0,"ix":96,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.321],[0,0]],"o":[[0,0],[-2.311,-0.03],[0,0],[0,0]],"v":[[5.332,4.733],[-1.146,4.651],[-5.302,0.385],[-5.237,-4.733]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1189.164,736.404],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 97","np":2,"cix":2,"bm":0,"ix":97,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.03,-2.312],[0,0]],"o":[[0,0],[2.312,0.03],[0,0],[0,0]],"v":[[-2.364,-6.401],[-1.823,-6.394],[2.334,-2.13],[2.225,6.401]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1160.652,704.759],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 98","np":2,"cix":2,"bm":0,"ix":98,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.618,2.339]],"o":[[3.443,-3.03],[0,0]],"v":[[-5.731,4.409],[5.731,-4.409]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1177.401,647.868],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 99","np":2,"cix":2,"bm":0,"ix":99,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-6.018,0.638]],"o":[[5.527,-1.709],[0,0]],"v":[[-9.386,1.815],[9.386,-1.815]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.01568627451,0.133333333333,0.247058838489,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[1225.397,627.064],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 100","np":2,"cix":2,"bm":0,"ix":100,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.312,-0.03],[0,0],[0,0],[0.03,-2.321],[0,0],[0,0],[10.903,21.977],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[2.311,0.03],[0,0],[0,0],[-21.568,-11.654],[0,0],[0,0],[2.312,0.03],[0,0],[0,0],[0,0],[-0.029,2.321]],"v":[[11.571,-0.311],[13.562,-0.303],[21.047,-0.208],[25.203,4.057],[24.928,25.569],[24.759,25.88],[-25.234,-25.876],[-24.059,-25.88],[3.453,-25.527],[7.609,-21.271],[7.608,-21.089],[7.626,-20.418],[7.422,-4.576]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1166.309,821.582],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 101","np":2,"cix":2,"bm":0,"ix":101,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[2.312,0.03],[0,0],[0,0],[0,0],[-0.029,2.321],[0,0],[0,0],[0,0],[2.107,0.247],[0,0],[-8.167,-3.445],[0,0],[0,0],[2.321,0.03],[0,0],[0,0],[0.026,-2.028]],"o":[[0,0],[0,0],[-0.03,2.321],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.027,-2.165],[0,0],[9,1.529],[0,0],[0,0],[-0.029,2.311],[0,0],[0,0],[-1.913,0.37],[0,0]],"v":[[3.458,6.891],[3.476,6.891],[3.459,8.267],[-0.806,12.424],[-4.622,12.375],[-4.621,12.265],[-5.63,12.252],[-9.787,7.987],[-9.648,-2.865],[-9.557,-3.506],[-9.554,-3.69],[-13.28,-7.921],[-12.534,-12.454],[13.28,-4.938],[13.176,-4.683],[13.141,-1.967],[8.877,2.189],[8.693,2.187],[6.877,2.164],[3.466,6.249]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1279.931,638.762],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 102","np":2,"cix":2,"bm":0,"ix":102,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.03,2.321],[0,0],[0,0],[0,0],[2.321,0.03],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[-0.03,2.321],[0,0],[0,0],[0,0],[2.32,0.03],[0,0],[0,0],[0,0],[-0.03,2.321],[0,0],[0,0],[0,0],[2.311,0.03],[0,0],[0,0],[0,0],[-0.029,2.312],[0,0],[0,0],[-2.005,2.516],[0,0],[-3.842,-0.902],[0,0],[-3.385,-0.043],[0,0],[-3.617,2.339],[0,0],[-3.348,-2.181],[0,0],[-3.286,-2.061],[0,0],[-2.836,-2.826],[0,0],[-6.018,0.639],[0,0],[-1.974,-3.493],[0,0],[-1.742,-3.61],[0,0],[-2.49,-0.436],[0,0],[0.147,0.002],[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[-2.107,-0.247],[0,0],[0,0],[0.03,-2.321],[0,0],[0,0],[0,0],[2.321,0.029],[0,0],[0,0],[0,0],[-0.029,2.312],[0,0],[0,0],[0,0],[1.912,0.419],[0,0],[0,0],[0.03,-2.311],[0,0],[0,0],[0,0],[-2.311,-0.03],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[-2.321,-0.029],[0,0],[0,0],[0,0],[0.029,-2.321],[0,0],[0,0],[0,0],[2.312,0.03],[0,0],[0,0],[0,0],[0.03,-2.321],[0,0],[0,0],[0,0],[2.312,0.029],[0,0],[0,0],[0,0],[-0.029,2.312],[0,0],[0,0],[0,0],[2.321,0.03],[0,0],[0,0],[0,0],[0.029,-2.312],[0,0],[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0],[0,0],[0.03,-2.321],[0,0],[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[0,0],[-2.312,-0.029],[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[0,0],[2.321,0.03],[0,0],[0,0],[0,0],[0.03,-2.311],[0,0],[0,0],[0,0],[2.312,0.03],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[2.44,0.031],[2.594,0.208],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[-0.03,2.311],[0,0],[0,0],[0,0],[2.321,0.03],[0,0],[0,0],[0,0],[-0.029,2.311],[0,0],[0,0],[0,0],[-2.321,-0.03]],"o":[[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.03,-2.321],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[0,0],[-2.312,-0.029],[0,0],[0,0],[1.805,-2.675],[0,0],[-1.427,-6.79],[0,0],[-0.635,-5.513],[0,0],[3.443,-3.03],[0,0],[0.752,-7.092],[0,0],[1.151,-6.748],[0,0],[2.17,-6.817],[0,0],[5.527,-1.709],[0,0],[3.94,-5.968],[0,0],[4.303,-5.706],[0,0],[2.547,0.271],[0,0],[-0.147,-0.011],[0,0],[0,0],[0,0],[-2.321,-0.029],[0,0],[0,0],[-0.028,2.165],[0,0],[0,0],[2.312,0.03],[0,0],[0,0],[0,0],[-0.029,2.312],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.026,-2.028],[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[2.312,0.029],[0,0],[0,0],[0,0],[0.03,-2.321],[0,0],[0,0],[0,0],[2.312,0.029],[0,0],[0,0],[0,0],[-0.03,2.321],[0,0],[0,0],[0,0],[-2.321,-0.029],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[0,0],[-2.321,-0.029],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[2.339,0.03],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[2.312,0.03],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[2.312,0.03],[0,0],[0,0],[0,0],[-0.03,2.321],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[-0.03,2.321],[0,0],[0,0],[-2.311,-0.029],[0,0],[0,0],[-2.405,0.116],[-2.642,-0.034],[0,0],[0,0],[0.03,-2.321],[0,0],[0,0],[0,0],[2.312,0.03],[0,0],[0,0],[0,0],[0.029,-2.312],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.03,-2.321],[0,0]],"v":[[1.019,28.912],[-3.586,28.853],[-7.743,24.588],[-7.628,15.607],[-7.683,15.606],[-7.62,10.671],[-11.776,6.406],[-19.216,6.311],[-21.592,6.28],[-29.041,6.185],[-33.198,1.92],[-33.186,1.03],[-33.45,0.862],[-39.927,0.779],[-44.084,-3.486],[-44.018,-8.605],[-43.975,-12.008],[-43.916,-16.595],[-48.072,-20.86],[-52.384,-20.915],[-52.383,-20.97],[-60.97,-21.08],[-65.117,-25.345],[-65.075,-28.684],[-65.069,-29.115],[-64.96,-37.647],[-69.116,-41.912],[-69.658,-41.919],[-72.896,-41.96],[-74.731,-41.984],[-78.888,-46.239],[-78.67,-63.183],[-78.952,-63.37],[-73.228,-71.151],[-73.191,-71.159],[-65.468,-79.566],[-65.342,-80.124],[-58.938,-87.951],[-56.277,-87.999],[-44.814,-96.816],[-44.43,-97.435],[-34.284,-103.003],[-34.228,-103.094],[-24.178,-108.305],[-23.498,-108.379],[-12.435,-111.779],[-11.935,-111.396],[6.838,-115.028],[7.5,-115.175],[19.074,-115.44],[19.489,-115.664],[31.053,-115.203],[31.895,-115.018],[39.451,-113.967],[38.705,-109.435],[38.274,-109.459],[36.898,-109.476],[36.897,-109.431],[25.357,-109.579],[21.092,-105.422],[21.086,-104.954],[21.132,-104.953],[24.858,-100.722],[27.179,-100.729],[28.555,-100.711],[32.712,-96.446],[32.597,-87.502],[32.633,-87.428],[32.624,-86.749],[28.36,-82.592],[24.287,-82.645],[24.287,-82.663],[23.883,-82.668],[19.726,-86.924],[19.735,-87.603],[19.836,-87.601],[19.866,-89.931],[16.552,-94.103],[14.075,-94.153],[10.92,-94.193],[6.655,-90.037],[6.492,-77.313],[6.556,-77.312],[6.467,-70.349],[10.623,-66.093],[11.302,-66.085],[11.851,-65.977],[18.814,-65.887],[23.079,-70.044],[23.088,-70.723],[23.005,-70.724],[23.01,-71.137],[27.275,-75.294],[33.422,-75.215],[34.229,-75.205],[39.091,-75.142],[43.248,-70.877],[43.191,-66.456],[43.125,-65.594],[42.955,-52.32],[38.69,-48.163],[34.268,-48.22],[34.047,-48.167],[25.149,-48.282],[20.884,-44.125],[20.477,-12.365],[20.467,-11.558],[20.416,-7.595],[16.151,-3.438],[15.123,-3.452],[14.857,-3.455],[13.83,-3.468],[9.673,-7.733],[9.734,-12.503],[9.679,-12.504],[9.724,-15.99],[5.567,-20.255],[-2.735,-20.361],[-2.735,-20.334],[-13.799,-20.476],[-18.063,-16.319],[-18.112,-12.539],[-18.12,-11.897],[-18.142,-10.191],[-13.985,-5.926],[-6.646,-5.832],[-6.645,-5.914],[-2.003,-5.855],[2.199,-1.59],[2.029,11.685],[1.988,12.024],[1.986,12.207],[6.142,16.463],[53.616,17.071],[54.276,17.117],[55.652,17.134],[59.809,21.399],[59.707,29.371],[59.703,29.655],[59.701,29.839],[63.849,34.103],[72.582,34.215],[73.389,34.207],[74.765,34.225],[78.922,38.49],[78.596,63.91],[78.597,64.552],[78.58,65.928],[74.315,70.085],[74.131,70.083],[73.333,70.073],[64.985,69.966],[60.72,74.122],[60.386,100.185],[60.331,100.184],[60.314,101.56],[56.049,105.717],[56.049,105.726],[29.472,105.385],[25.208,109.533],[25.072,120.138],[25.113,121.212],[17.845,121.339],[9.986,120.981],[10.019,120.587],[10.302,98.497],[14.558,94.34],[14.741,94.342],[15.126,94.347],[15.31,94.349],[19.575,90.193],[19.592,88.817],[19.62,88.817],[19.794,75.249],[15.637,70.984],[14.261,70.967],[14.262,70.902],[0.501,70.726],[-3.647,66.471],[-3.312,40.353],[-3.333,39.866],[-3.247,33.151],[1.018,28.995]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1227.946,740.276],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 103","np":2,"cix":2,"bm":0,"ix":103,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.026,2.018],[0,0],[0,0],[-3.116,-3.876],[0,0],[0,0],[2.321,0.03],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[2.321,0.03],[0,0],[0,0],[0,0],[0.054,2.239],[0,0],[0,0],[-2.312,-0.03],[0,0]],"o":[[1.922,-0.37],[0,0],[0,0],[3.58,3.44],[0,0],[0,0],[-0.03,2.32],[0,0],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[0,0],[-2.266,-0.029],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0]],"v":[[-3.801,-7.169],[-0.381,-11.253],[-0.379,-11.401],[-0.035,-11.763],[10.018,-0.789],[9.897,-0.69],[9.791,7.576],[5.526,11.732],[5.343,11.731],[5.315,11.731],[3.939,11.712],[-0.217,7.448],[-0.215,7.264],[-0.238,6.934],[-0.236,6.75],[-4.393,2.486],[-5.769,2.467],[-5.768,2.44],[-5.869,2.439],[-10.019,-1.66],[-9.973,-1.659],[-9.956,-3.035],[-5.691,-7.193],[-5.507,-7.19]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1329.558,669.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 104","np":2,"cix":2,"bm":0,"ix":104,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.03,2.312],[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0],[-2.307,-6.901],[0,0],[0,0],[0.383,-1.95],[0.003,-0.257],[0,0],[2.064,0.026],[0,0],[0,0],[0,0],[-0.03,2.312],[0,0],[0,0],[0,0],[-2.312,-0.029],[0,0],[0,0]],"o":[[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[3.498,6.266],[0,0],[0,0],[-2.054,-0.027],[-0.049,0.247],[0,0],[-0.373,1.95],[0,0],[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0],[0,0],[0.03,-2.312],[0,0],[0,0],[2.312,0.029]],"v":[[-3.688,-8.757],[-3.761,-8.758],[-3.745,-10.033],[0.52,-14.19],[6.272,-14.116],[6.992,-14.52],[15.749,5.273],[14.652,5.645],[7.386,5.552],[3.205,8.948],[3.122,9.699],[3.104,11.075],[-1.077,14.481],[-1.252,14.478],[-1.546,14.52],[-11.564,14.392],[-15.72,10.136],[-15.6,0.761],[-15.655,0.76],[-15.638,-0.579],[-11.373,-4.727],[-7.952,-4.683],[-7.953,-4.609]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1343.883,699.996],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 105","np":2,"cix":2,"bm":0,"ix":105,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.321,-0.03],[0,0],[0,0],[0.03,-2.312],[0,0],[-2.266,-0.029],[0,0],[0,0],[0.038,-2.926],[7.694,-15.454],[0,0],[0,0],[-0.029,2.312],[0,0],[0,0],[0,0],[-1.913,0.37],[0,0],[0,0],[-0.03,2.321],[0,0]],"o":[[0,0],[0.03,-2.311],[0,0],[0,0],[2.311,0.03],[0,0],[0.035,2.249],[0,0],[0,0],[0.174,2.884],[-0.236,18.412],[0,0],[0,0],[-2.312,-0.03],[0,0],[0,0],[0,0],[0.026,-2.027],[0,0],[0,0],[2.321,0.03],[0,0],[0,0]],"v":[[-9.508,-21.304],[-9.396,-30.047],[-5.131,-34.194],[-4.233,-34.238],[8.923,-34.069],[13.071,-29.804],[13.108,-29.804],[17.256,-25.686],[18.633,-25.668],[19.405,-25.723],[19.614,-17.004],[7.259,34.238],[6.975,34.096],[-15.454,33.809],[-19.611,29.544],[-19.609,29.36],[-19.651,29.131],[-19.127,-11.711],[-15.718,-15.796],[-14.011,-15.774],[-13.828,-15.772],[-9.562,-19.928],[-9.546,-21.304]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.831372608858,0.486274539723,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1346.193,761.631],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 106","np":2,"cix":2,"bm":0,"ix":106,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"earth water fill PEG","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[1244.654,735.19,0],"to":[-46.167,0,0],"ti":[46.167,0,0]},{"t":146,"s":[967.654,735.19,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":146,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"earth water mask Outlines","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[965.53,543.11,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.741,-5.975],[0,0],[30.062,0.385],[21.349,23.707],[0,0],[-3.949,-1.885],[-12.513,-0.106],[-25.803,-0.606]],"o":[[0,0],[-21.125,18.18],[-34.42,-0.442],[0,0],[3.986,1.859],[11.289,5.393],[25.807,0.23],[14.804,0.346]],"v":[[81.906,-7.919],[82.674,-7.019],[3.896,21.616],[-82.674,-17.599],[-82.062,-18.151],[-70.188,-12.448],[-34.457,-1.979],[39.91,-21.395]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1241.895,839.999],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-19.218,-26.065],[0,0],[20.252,0.48],[25.266,0.223],[11.051,5.39],[3.739,1.782],[0,0],[-31.878,-0.409],[-2.292,-0.158],[0,0]],"o":[[0,0],[-19.476,-5.25],[-25.271,-0.599],[-12.256,-0.102],[-3.72,-1.818],[0,0],[21.554,-20.202],[2.331,0.03],[0,0],[34.021,3.574]],"v":[[88.347,24.04],[88.134,24.193],[30.755,4.694],[-42.072,24.129],[-77.059,13.67],[-88.229,8.196],[-88.346,8.066],[-5.818,-23.943],[1.124,-23.652],[5.453,-23.541]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1254.388,648.799],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-23.863,-2.315],[0,0],[11.634,-10.008],[0,0],[14.805,0.346],[25.807,0.23],[11.29,5.393],[3.986,1.859],[0,0],[4.58,19.923],[0,0],[-1.721,-0.334],[-11.299,-5.393],[-12.513,-0.115],[-25.803,-0.606]],"o":[[0,0],[-7.04,13.801],[0,0],[-13.741,-5.975],[-25.802,-0.606],[-12.514,-0.106],[-3.948,-1.885],[0,0],[-13.244,-14.713],[0,0],[1.769,0.169],[12.292,2.388],[11.289,5.393],[25.807,0.22],[23.967,0.564]],"v":[[109.249,-7.557],[110.562,-6.898],[82.215,29.146],[81.448,28.245],[39.45,14.77],[-34.916,34.185],[-70.647,23.716],[-82.521,18.013],[-83.133,18.565],[-110.562,-34.104],[-109.154,-34.416],[-103.906,-33.661],[-69.088,-19.901],[-33.357,-9.422],[41.001,-28.848]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1242.354,803.834],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[11.159,2.675],[0.037,0.01],[-3.176,4.418],[-5.638,5.277],[0,0],[-3.721,-1.819],[-12.257,-0.103],[-25.27,-0.599],[-19.476,-5.251],[0,0],[-3.819,-14.885],[0,0],[3.335,0.327],[23.83,0.563],[25.66,0.219],[11.226,5.393]],"o":[[-0.037,-0.01],[2.558,-4.848],[4.521,-6.292],[0,0],[3.739,1.782],[11.051,5.39],[25.266,0.223],[20.253,0.48],[0,0],[8.883,12.033],[0,0],[-3.335,0.333],[-23.725,-2.314],[-25.646,-0.604],[-12.44,-0.113],[-10.386,-4.996]],"v":[[-109.862,4.746],[-109.973,4.718],[-101.353,-9.201],[-86.073,-26.594],[-85.955,-26.464],[-74.786,-20.99],[-39.797,-10.531],[33.027,-29.966],[90.407,-10.466],[90.62,-10.62],[109.973,30.053],[109.347,30.221],[99.308,30.239],[31.464,8.953],[-42.461,28.384],[-77.983,17.909]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1252.114,683.459],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.691,0.876],[0,0],[6.287,-12.306],[0,0],[23.967,0.564],[25.807,0.221],[11.29,5.393],[12.292,2.387],[1.769,0.169],[0,0],[-0.125,9.678],[-0.415,3.748],[0,0],[-3.039,-0.599],[-11.152,-5.401],[-12.367,-0.104],[-25.49,-0.602],[-23.569,-2.312]],"o":[[0,0],[-1.643,14.347],[0,0],[-23.862,-2.316],[-25.802,-0.606],[-12.514,-0.114],[-11.299,-5.393],[-1.72,-0.334],[0,0],[-2.077,-9.037],[0.049,-3.844],[0,0],[3.129,0.031],[12.136,2.376],[11.153,5.391],[25.495,0.226],[23.674,0.551],[4.756,0.465]],"v":[[117.5,-6.894],[118.178,-6.83],[106.056,33.367],[104.743,32.708],[36.496,11.418],[-37.861,30.842],[-73.593,20.365],[-108.411,6.605],[-113.659,5.85],[-115.066,6.162],[-118.054,-21.98],[-117.358,-33.367],[-116.616,-33.284],[-107.315,-32.32],[-72.929,-18.566],[-37.628,-8.103],[35.839,-27.53],[103.252,-6.251]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1246.858,763.569],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.138,-10.752],[0.455,-3.977],[0,0],[4.756,0.465],[23.674,0.551],[25.495,0.226],[11.152,5.391],[12.136,2.376],[3.128,0.031],[0,0],[-6.697,12.787],[-10.387,-4.996],[-12.44,-0.114],[-25.646,-0.605],[-23.725,-2.313],[-3.335,0.334],[0,0]],"o":[[-0.052,4.091],[0,0],[-4.691,0.876],[-23.569,-2.312],[-25.49,-0.603],[-12.367,-0.103],[-11.152,-5.401],[-3.038,-0.598],[0,0],[1.624,-15.026],[11.159,2.675],[11.225,5.392],[25.661,0.219],[23.83,0.562],[3.336,0.328],[0,0],[2.561,9.933]],"v":[[118.084,21.633],[117.314,33.745],[116.636,33.681],[102.388,34.324],[34.975,13.044],[-38.492,32.471],[-73.793,22.008],[-108.18,8.254],[-117.48,7.291],[-118.222,7.208],[-105.471,-34.789],[-73.591,-21.626],[-38.071,-11.151],[35.855,-30.581],[103.699,-9.297],[113.737,-9.315],[114.363,-9.482]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1247.723,722.994],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"earth water fill Outlines","parent":2,"tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-229.124,-142.08,0],"ix":2,"l":2},"a":{"a":0,"k":[965.53,543.11,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.03,12.99],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03],[22.05,13.04],[0,0],[0,0],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03],[22.03,12.99],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03]],"o":[[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.11,12.76],[0,0],[0,0],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75]],"v":[[-138.45,32.135],[-138.47,32.165],[-207.74,32.085],[-207.88,32.165],[-276.84,32.165],[-346.11,32.085],[-346.26,32.165],[-415.53,32.085],[-415.53,-45.205],[415.53,-45.205],[415.53,32.165],[346.26,32.085],[346.12,32.165],[277.16,32.165],[207.89,32.085],[207.74,32.165],[138.55,32.135],[138.53,32.165],[69.26,32.085],[69.12,32.165],[0.16,32.165],[-69.11,32.085],[-69.26,32.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568627,0.521568627451,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1314.559,630.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.03,12.99],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03],[22.05,13.04],[0,0],[-24.11,12.76],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03],[22.03,12.99],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03]],"o":[[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.11,12.76],[0,0],[22.05,13.05],[0.05,-0.03],[22.05,-12.99],[22.05,13.05],[0.05,-0.03],[22.06,-12.99],[0,0],[22.03,13],[0.05,-0.03],[22.05,-12.99],[22.05,13.05],[0.05,-0.03],[22.06,-12.99],[0,0],[22.03,13],[0.05,-0.03],[22.05,-12.99],[22.05,13.05],[0.05,-0.03],[22.06,-12.99],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75]],"v":[[-138.45,20.675],[-138.47,20.705],[-207.74,20.625],[-207.88,20.705],[-276.84,20.705],[-346.11,20.625],[-346.26,20.705],[-415.53,20.625],[-415.53,-20.755],[-346.26,-20.675],[-346.11,-20.755],[-276.84,-20.675],[-207.88,-20.675],[-207.74,-20.755],[-138.47,-20.675],[-138.45,-20.705],[-69.26,-20.675],[-69.11,-20.755],[0.16,-20.675],[69.12,-20.675],[69.26,-20.755],[138.53,-20.675],[138.55,-20.705],[207.74,-20.675],[207.89,-20.755],[277.16,-20.675],[346.12,-20.675],[346.26,-20.755],[415.53,-20.675],[415.53,20.705],[346.26,20.625],[346.12,20.705],[277.16,20.705],[207.89,20.625],[207.74,20.705],[138.55,20.675],[138.53,20.705],[69.26,20.625],[69.12,20.705],[0.16,20.705],[-69.11,20.625],[-69.26,20.705]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568627,0.521568627451,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1314.559,724.895],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.03,13],[0,0],[22.06,-12.99],[0.05,-0.03],[22.05,13.05],[22.05,-12.99],[0.05,-0.03],[22.05,13.05],[0,0],[-24.11,12.76],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[22.06,-12.99],[0.05,-0.03],[22.05,13.05],[22.05,-12.99],[0.05,-0.03],[22.03,13],[0,0],[22.06,-12.99],[0.05,-0.03],[22.05,13.05],[22.05,-12.99],[0.05,-0.03]],"o":[[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.11,12.76],[0,0],[22.05,13.04],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[22.03,12.99],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[22.03,12.99],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75]],"v":[[-138.45,20.67],[-138.47,20.7],[-207.74,20.62],[-207.88,20.7],[-276.84,20.7],[-346.11,20.62],[-346.26,20.7],[-415.53,20.62],[-415.53,-20.75],[-346.26,-20.67],[-346.11,-20.75],[-276.84,-20.67],[-207.88,-20.67],[-207.74,-20.75],[-138.47,-20.67],[-138.45,-20.7],[-69.26,-20.67],[-69.11,-20.75],[0.16,-20.67],[69.12,-20.67],[69.26,-20.75],[138.53,-20.67],[138.55,-20.7],[207.74,-20.67],[207.89,-20.75],[277.16,-20.67],[346.12,-20.67],[346.26,-20.75],[415.53,-20.67],[415.53,20.7],[346.26,20.62],[346.12,20.7],[277.16,20.7],[207.89,20.62],[207.74,20.7],[138.55,20.67],[138.53,20.7],[69.26,20.62],[69.12,20.7],[0.16,20.7],[-69.11,20.62],[-69.26,20.7]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568627,0.521568627451,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1314.559,807.64],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.03,12.99],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03],[22.05,13.04],[0,0],[-24.11,12.76],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03],[22.03,12.99],[0,0],[22.06,-13],[0.05,-0.03],[22.05,13.04],[22.05,-13],[0.05,-0.03]],"o":[[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.11,12.76],[0,0],[22.05,13.04],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[22.03,12.99],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[22.03,12.99],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75]],"v":[[-138.45,20.675],[-138.47,20.705],[-207.74,20.625],[-207.88,20.705],[-276.84,20.705],[-346.11,20.625],[-346.26,20.705],[-415.53,20.625],[-415.53,-20.745],[-346.26,-20.665],[-346.11,-20.745],[-276.84,-20.665],[-207.88,-20.665],[-207.74,-20.745],[-138.47,-20.665],[-138.45,-20.695],[-69.26,-20.665],[-69.11,-20.745],[0.16,-20.665],[69.12,-20.665],[69.26,-20.745],[138.53,-20.665],[138.55,-20.695],[207.74,-20.665],[207.89,-20.745],[277.16,-20.665],[346.12,-20.665],[346.26,-20.745],[415.53,-20.665],[415.53,20.705],[346.26,20.625],[346.12,20.705],[277.16,20.705],[207.89,20.625],[207.74,20.705],[138.55,20.675],[138.53,20.705],[69.26,20.625],[69.12,20.705],[0.16,20.705],[-69.11,20.625],[-69.26,20.705]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.352941176471,0.690196078431,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1314.559,766.265],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.03,13],[0,0],[22.06,-12.99],[0.05,-0.03],[22.05,13.05],[22.05,-12.99],[0.05,-0.03],[22.05,13.05],[0,0],[-24.11,12.76],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[22.06,-12.99],[0.05,-0.03],[22.05,13.05],[22.05,-12.99],[0.05,-0.03],[22.03,13],[0,0],[22.06,-12.99],[0.05,-0.03],[22.05,13.05],[22.05,-12.99],[0.05,-0.03]],"o":[[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.11,12.76],[0,0],[22.05,13.04],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[22.03,12.99],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[22.03,12.99],[0.05,-0.03],[22.05,-13],[22.05,13.04],[0.05,-0.03],[22.06,-13],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75],[0,0],[-24.11,-12.81],[-0.05,0.03],[-24.11,12.76],[-24.11,-12.81],[-0.05,0.02],[-24.08,12.75]],"v":[[-138.45,20.67],[-138.47,20.7],[-207.74,20.62],[-207.88,20.7],[-276.84,20.7],[-346.11,20.62],[-346.26,20.7],[-415.53,20.62],[-415.53,-20.75],[-346.26,-20.67],[-346.11,-20.75],[-276.84,-20.67],[-207.88,-20.67],[-207.74,-20.75],[-138.47,-20.67],[-138.45,-20.7],[-69.26,-20.67],[-69.11,-20.75],[0.16,-20.67],[69.12,-20.67],[69.26,-20.75],[138.53,-20.67],[138.55,-20.7],[207.74,-20.67],[207.89,-20.75],[277.16,-20.67],[346.12,-20.67],[346.26,-20.75],[415.53,-20.67],[415.53,20.7],[346.26,20.62],[346.12,20.7],[277.16,20.7],[207.89,20.62],[207.74,20.7],[138.55,20.67],[138.53,20.7],[69.26,20.62],[69.12,20.7],[0.16,20.7],[-69.11,20.62],[-69.26,20.7]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.352941176471,0.690196078431,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1314.559,683.52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-24.11,-12.81],[0,0],[0,0],[0,0],[-24.11,12.76],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03],[-24.11,-12.81],[0,0],[-24.08,12.75],[-0.05,0.02],[-24.11,-12.81],[-24.11,12.76],[-0.05,0.03]],"o":[[0,0],[0,0],[0,0],[22.05,13.05],[0.05,-0.03],[22.05,-12.99],[22.05,13.05],[0.05,-0.03],[22.06,-12.99],[0,0],[22.03,13],[0.05,-0.03],[22.05,-12.99],[22.05,13.05],[0.05,-0.03],[22.06,-12.99],[0,0],[22.03,13],[0.05,-0.03],[22.05,-12.99],[22.05,13.05],[0.05,-0.03],[22.06,-12.99]],"v":[[415.53,-25.915],[415.53,38.985],[-415.53,38.985],[-415.53,-25.995],[-346.26,-25.915],[-346.11,-25.995],[-276.84,-25.915],[-207.88,-25.915],[-207.74,-25.995],[-138.47,-25.915],[-138.45,-25.945],[-69.26,-25.915],[-69.11,-25.995],[0.16,-25.915],[69.12,-25.915],[69.26,-25.995],[138.53,-25.915],[138.55,-25.945],[207.74,-25.915],[207.89,-25.995],[277.16,-25.915],[346.12,-25.915],[346.26,-25.995]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.352941176471,0.690196078431,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1314.559,854.255],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":146,"st":0,"ct":1,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[187.5,126,0],"ix":2,"l":2},"a":{"a":0,"k":[200,200,0],"ix":1,"l":2},"s":{"a":0,"k":[66,66,100],"ix":6,"l":2}},"ao":0,"w":400,"h":400,"ip":0,"op":146,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/assets/emojis/index.js b/assets/emojis/index.js index 3882ac7f0fa6..c8dab36f57d9 100644 --- a/assets/emojis/index.js +++ b/assets/emojis/index.js @@ -15,13 +15,18 @@ const emojiNameTable = _.reduce( {}, ); -const emojiCodeTable = _.reduce( +const emojiCodeTableWithSkinTones = _.reduce( emojis, (prev, cur) => { const newValue = prev; if (!cur.header) { newValue[cur.code] = cur; } + if (cur.types) { + cur.types.forEach((type) => { + newValue[type] = cur; + }); + } return newValue; }, {}, @@ -32,5 +37,5 @@ const localeEmojis = { es: esEmojis, }; -export {emojiNameTable, emojiCodeTable, localeEmojis}; +export {emojiNameTable, emojiCodeTableWithSkinTones, localeEmojis}; export {skinTones, categoryFrequentlyUsed, default} from './common'; diff --git a/assets/images/emptystate__routepending.svg b/assets/images/emptystate__routepending.svg new file mode 100644 index 000000000000..7646917046cc --- /dev/null +++ b/assets/images/emptystate__routepending.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/expensify-app-icon.svg b/assets/images/expensify-app-icon.svg new file mode 100644 index 000000000000..a0adfe7dd952 --- /dev/null +++ b/assets/images/expensify-app-icon.svg @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/assets/images/heart.svg b/assets/images/heart.svg new file mode 100644 index 000000000000..95e73f329cfa --- /dev/null +++ b/assets/images/heart.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/assets/images/lounge-access.svg b/assets/images/lounge-access.svg deleted file mode 100644 index 3be9ff00fb7a..000000000000 --- a/assets/images/lounge-access.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/assets/images/new-expensify-dev.svg b/assets/images/new-expensify-dev.svg index 8f995412bb0c..423fe56c98b7 100644 --- a/assets/images/new-expensify-dev.svg +++ b/assets/images/new-expensify-dev.svg @@ -1,6 +1,6 @@ - + diff --git a/assets/images/signIn/apple-logo.svg b/assets/images/signIn/apple-logo.svg new file mode 100644 index 000000000000..4e428fc41aed --- /dev/null +++ b/assets/images/signIn/apple-logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/signIn/google-logo.svg b/assets/images/signIn/google-logo.svg new file mode 100644 index 000000000000..ebdd4be8cade --- /dev/null +++ b/assets/images/signIn/google-logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/images/simple-illustrations/simple-illustration__email-address.svg b/assets/images/simple-illustrations/simple-illustration__email-address.svg new file mode 100644 index 000000000000..a8f0db9a4f8b --- /dev/null +++ b/assets/images/simple-illustrations/simple-illustration__email-address.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + diff --git a/config/webpack/webpack.common.js b/config/webpack/webpack.common.js index f3c02b286623..7dc851c95c9e 100644 --- a/config/webpack/webpack.common.js +++ b/config/webpack/webpack.common.js @@ -194,7 +194,7 @@ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({ // This is also why we have to use .website.js for our own web-specific files... // Because desktop also relies on "web-specific" module implementations // This also skips packing web only dependencies to desktop and vice versa - extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.js', '.jsx', '.web.ts', platform === 'web' ? '.website.ts' : '.desktop.ts', '.ts', '.tsx'], + extensions: ['.web.js', platform === 'web' ? '.website.js' : '.desktop.js', '.js', '.jsx', '.web.ts', platform === 'web' ? '.website.ts' : '.desktop.ts', '.ts', '.web.tsx', '.tsx'], fallback: { 'process/browser': require.resolve('process/browser'), }, diff --git a/config/webpack/webpack.dev.js b/config/webpack/webpack.dev.js index af302a0e663e..19999491395e 100644 --- a/config/webpack/webpack.dev.js +++ b/config/webpack/webpack.dev.js @@ -24,6 +24,7 @@ module.exports = (env = {}) => '/api': 'http://[::1]:9000', '/staging': 'http://[::1]:9000', '/chat-attachments': 'http://[::1]:9000', + '/receipts': 'http://[::1]:9000', }, }; diff --git a/contributingGuides/APPLE_GOOGLE_SIGNIN.md b/contributingGuides/APPLE_GOOGLE_SIGNIN.md new file mode 100644 index 000000000000..9032a99dfbbd --- /dev/null +++ b/contributingGuides/APPLE_GOOGLE_SIGNIN.md @@ -0,0 +1,272 @@ +# Overview + +"Sign in with Apple" and "Sign in with Google" are multi-platform sign-in methods. Both Apple and Google provide official tools, but we have to manage the fact that the behavior, APIs, and constraints for each of those tools varies quite a bit. The architecture of Apple and Google sign-in aims to provide as consistent a user experience and implementation as possible, but our options are limited by Apple and Google. This document will describe the user experience, tooling, and options available on each and why this feature is implemented the way it is. + +## Terms + +The **client app**, or **client**: this refers to the application that is attempting to access a user's resources hosted by a third party. In this case, this is the Expensify app. + +The **third party**: this is any other service that the client app (Expensify) wants to interact with on behalf of a user. In this case, Apple or Google. Since this flow is specifically concerned with authentication, it may also be called the **third-party authentication provider**. + +**Third-party sign-in**: a general phrase to refer to either "Sign in with Apple" or "Sign in with Google" (or any future similar features). Any authentication method that involves authentication with a service not provided by Expensify. + +## How third-party sign-in works + +When the user signs in to the app with a third party like Apple or Google, there is a general flow used by all of them: + +1. The user presses a button within the client app to start their preferred sign-in process. +2. The user is sent to a UI owned by the third-party to sign in (e.g., the Google sign-in web page hosted by Google, or the Sign in with Apple bottom sheet provided by iOS). +3. When the user successfully signs in with the third party, the third party generates a token and sends it back to the client app. +4. The client app sends the token to the client backend API, where the token is verified and the user's email is extracted from the token, and the user is signed in. + +Both services also require registering a "client ID", along with some configuration we'll explain next. For apps that aren't built using XCode, Apple calls this a "service ID", and it can be configured under "[Services IDs](https://developer.apple.com/account/resources/identifiers/list/serviceId)" in "Certificates, Identifiers & Profiles" in the Apple Developer console. (For apps made using XCode, like the iOS app, the bundle identifier is used as the client ID.) For Google, this configuration is done under "[Credentials](https://console.cloud.google.com/apis/credentials)" in the Google Cloud console. + +### On web + +We'll cover web details first, because web is treated as the "general use" case for services like this, and then platform-specific tools are built on top of that, which we'll cover afterwards. + +Both services also provide official Javascript libraries for integrating their services on web platforms. Using these libraries offers improved security and decreased maintenance burden over using the APIs directly, as Google notes while they heavily discourage using their auth APIs directly; but they also add additional constraints, which will be described later in the document. + +How the third party sends the token in step 3 depends on the third party's implementation and the app's configuration. In both Apple and Google's case, there are two main modes: "pop-up", and "redirect". + +#### Redirect mode + +From the user's perspective, redirect mode will usually look like opening the third party's sign-in page in the same browser window, and then redirecting back to the client app in that window. But re-use of the same window isn't required. The key point is the redirection back to the client app, via the third-party sign-in form making an HTTPS request. + +In both the Google and Apple JS libraries, the request endpoint, found at the "redirect URI", must handle a POST request with form data in the body, which contains the token we need to send to the client back-end API. This pattern is not easily implemented with the existing single-page web app, and so we use the other mode: "pop-up mode". + +The redirect URI must match a URI in the Google or Apple client ID configuration. + +#### Pop-up mode + +Pop-up mode opens a pop-up window to show the third-party sign-in form. But it also changes how tokens are given to the client app. Instead of an HTTPS request, they are returned by the JS libraries in memory, either via a callback (Google) or a promise (Apple). + +Apple and Google both check that the client app is running on an allowed domain. The sign-in process will fail otherwise. Google allows localhost, but Apple does not, and so testing Apple in development environments requires hosting the client app on a domain that the Apple client ID (or "service ID", in Apple's case) has been configured with. + +In the case of Apple, sometimes it will silently fail at the very end of the sign-in process, where the only sign that something is wrong is that the pop-up fails to close. In this case, it's very likely that configuration mismatch is the issue. + +In addition, Apple will require a valid redirect URI be provided in the library's configuration, even though it is not used. + +### Considerations for non-web platforms + +For apps that aren't web-based, there are other options: + +Sign in with Google provides libraries on [Android](https://developers.google.com/identity/sign-in/android/start) and [iOS](https://developers.google.com/identity/sign-in/ios/start) to use that will authenticate the mobile app is who it says it is, via app signing. For React Native, we use the [react-native-google-signin](https://github.com/react-native-google-signin/google-signin) wrapper to use these libraries. + +The [iOS implementation for Sign in with Apple](https://developer.apple.com/documentation/authenticationservices/implementing_user_authentication_with_sign_in_with_apple?language=objc) can also verify the app's bundle ID and the team who signed it. We use the [react-native-apple-authentication](https://github.com/invertase/react-native-apple-authentication) wrapper library for this. + +There is no official library for Sign in with Apple on Android, so it has to work with the web tooling; but Android can't meet the requirements of the official JS library. It isn't hosted on a domain, which is required for pop-up flow, and can't receive an HTTPS request, which is required for redirect flow with the official JS library. To deal with this, react-native-apple-authentication's implementation uses a webview on Android, which can intercept the redirect POST and pass the data directly to the react-native app. + +#### Issues with third-party sign-in and Electron + +These tools aren't built with Electron or similar desktop apps in mind, and that presents similar challenges as Sign in with Apple for Android: + +1. Like mobile platforms, Electron does not have the option of validating the origin of the client app authentication request using a registered HTTPS domain +2. Unlike many mobile platforms, there are not official tools for Electron or desktop apps in general. +3. Attempts to get Electron to work like web are either blocked by the third-party authentication provider, broken, or inadvisable. + +These are the specific issues we've seen: + +1. [Google stopped allowing its sign-in page to render inside embedded browser frameworks](https://security.googleblog.com/2019/04/better-protection-against-man-in-middle.html) such as Electron. This means we can't open the sign-in flow inside the an Electron window. However, opening the sign-in form in the user's default web browser did work. +2. On the other hand, opening the Sign in with Apple form in the user's default browser instead of Electron does _not_ work, and renders an Apple page with an empty body instead of the sign-in form. + +We decided to instead redirect the user to a dedicated page in the web app to sign in. Apple and Google each have their own routes, `/sign-in-with-apple` and `/sign-in-with-google`, where the user is shown another button to click to start the sign-in process on web (since it shows a pop-up, the user must click the button directly, otherwise the pop-up would be blocked). After signing in, the user will be shown a deep link prompt in the browser to open the desktop app, where they will be signed in using a short-lived token from the Expensify API. + +Due to Expensify's expectation that a user will be using the same account on web and desktop, we do not go through this process if the user was already signed in, but instead the web app prompts the user to go back to desktop again, which will also sign them in on the desktop app. + +## Additional design constraints + +### New Google web library limits button style choices + +The current Sign in with Google library for web [does not allow arbitrary customization of the sign-in button](https://developers.google.com/identity/gsi/web/guides/offerings#sign_in_with_google_button). (The recently deprecated version of the Sign in with Google for web did offer this capability.) + +This means the button is limited in design: there are no offline or hover states, and there can only be a white background for the button. We were able to get the official Apple button options to match, so we used the Google options as the starting point for the design. + +### Sign in with Apple does not allow `localhost` + +Unlike Google, Apple does not allow `localhost` as a domain to host a pop-up or redirect to. In order to test Sign in with Apple on web or desktop, this means we have to: + +1. Use SSH tunneling to host the app on an HTTPS domain +2. Create a test Apple Service ID configuration in the Apple developer console, to allow testing the sign-in flow from its start until the point Apple sends its token to the Expensify app. +3. Use token interception on Android to test the web and desktop sign-in flow from the point where the front-end Expensify app has received a token, until the point where the user is signed in to Expensify using that token. + +These steps are covered in more detail in the "testing" section below. + +# Testing Apple/Google sign-in + +Due to some technical constraints, Apple and Google sign-in may require additional configuration to be able to work in the development environment as expected. This document describes any additional steps for each platform. + +## Apple + +### iOS/Android + +The iOS and Android implementations do not require extra steps to test, aside from signing into an Apple account on the iOS device before being able to use Sign in with Apple. + +### Web and desktop + +#### Render the web Sign In with Apple button in development + +The Google Sign In button renders differently in development mode. To prevent confusion +for developers about a possible regression, we decided to not render third party buttons in +development mode. + +To show the Apple Sign In button in development mode, you can comment out the following code in the +LoginForm.js file: + +```js +if (CONFIG.ENVIRONMENT === CONST.ENVIRONMENT.DEV) { + return; +} +``` + +#### Port requirements + +The Sign in with Apple process will break after the user signs in if the pop-up process is not started from a page at an HTTPS domain registered with Apple. To fix this, you could make a new configuration with your own HTTPS domain, but then the Apple configuration won't match that of Expensify's backend. + +So to be able to test this, we have two parts: +1. Create a valid Sign in with Apple token using valid configuration for the Expensify app, by creating and intercepting one on Android +2. Host the development web app at an HTTPS domain using SSH tunneling, and in the web app use a custom Apple config with this HTTPS domain registered + +Requirements: +1. Authorization on an Apple Development account or team to create new Service IDs +2. An SSH tunneling tool that provides static HTTPS domains. [ngrok](https://ngrok.com) is a good choice that provides one static HTTPS domain for a free account. + +#### Generate the token to use + +**Note**: complete this step before changing other configuration to test Apple on web and desktop, as updating those will cause Android to stop working while the configuration is changed. + +On an Android build, alter the `AppleSignIn` component to log the token generated, instead of sending it to the Expensify API: + +```js +// .then((token) => Session.beginAppleSignIn(token)) + .then((token) => console.log("TOKEN: ", token)) +``` + +If you need to check that you received the correct data, check it on [jwt.io](https://jwt.io), which will decode it if it is a valid JWT token. It will also show when the token expires. + +Hardcode this token into `Session.beginAppleSignIn`, and but also verify a valid token was passed into the function, for example: + +``` +function beginAppleSignIn(idToken) { ++ // Show that a token was passed in, without logging the token, for privacy ++ window.alert(`ORIGINAL ID TOKEN LENGTH: ${idToken.length}`); ++ const hardcodedToken = '...'; + const {optimisticData, successData, failureData} = signInAttemptState(); ++ API.write('SignInWithApple', {idToken: hardcodedToken}, {optimisticData, successData, failureData}); +- API.write('SignInWithApple', {idToken}, {optimisticData, successData, failureData}); +} +``` + +#### Configure the SSH tunneling + +You can use any SSH tunneling service that allows you to configure custom subdomains so that we have a consistent address to use. We'll use ngrok in these examples, but ngrok requires a paid account for this. If you need a free option, try serveo.net. + +After you've set ngrok up to be able to run on your machine (requires configuring a key with the command line tool, instructions provided by the ngrok website after you create an account), test hosting the web app on a custom subdomain. This example assumes the development web app is running at `localhost:8082`: + +``` +ngrok http 8082 --host-header="localhost:8082" --subdomain=mysubdomain +``` + +The `--host-header` flag is there to avoid webpack errors with header validation. In addition, add `allowedHosts: 'all'` to the dev server config in `webpack.dev.js`: + +```js +devServer: { + ..., + allowedHosts: 'all', +} +``` + +#### Configure Apple Service ID + +Now that you have an HTTPS address to use, you can create an Apple Service ID configuration that will work with it. + +1. Create a new app ID on your Apple development team that can be used to test this, following the instructions [here](https://github.com/invertase/react-native-apple-authentication/blob/main/docs/INITIAL_SETUP.md). +2. Create a new service ID following the instructions [here](https://github.com/invertase/react-native-apple-authentication/blob/main/docs/ANDROID_EXTRA.md). For allowed domains, enter your SSH tunnel address (e.g., `https://mysubdomain.ngrok-free.app`), and for redirect URLs, just make up an endpoint, it's never actually invoked (e.g., `mysubdomain.ngrok-free.app/appleauth`). + +Notes: +- Depending on your Apple account configuration, you may need additional permissions to access some of the features described in the instructions above. +- While the Apple Sign In configuration requires a `clientId`, the Apple Developer console calls this a `Service ID`. + +Finally, edit `.env` to use your client (service) ID and redirect URL config: + +``` +ASI_CLIENTID_OVERRIDE=com.example.test +ASI_REDIRECTURI_OVERRIDE=https://mysubdomain.ngrok-free.app/appleauth +``` + +#### Run the app + +Remember that you will need to restart the web server if you make a change to the `.env` file. + +### Desktop + +Desktop will require the same configuration, with these additional steps: + +#### Configure web app URL in .env + +Add `NEW_EXPENSIFY_URL` to .env, and set it to the HTTPS URL where the web app can be found, for example: + +``` +NEW_EXPENSIFY_URL=https://subdomain.ngrok-free.app +``` + +This is required because the desktop app needs to know the address of the web app, and must open it at the HTTPS domain configured to work with Sign in with Apple. + +Note that changing this value to a domain that isn't configured for use with Expensify will cause Android to break, as it is still using the real client ID, but now has an incorrect value for `redirectURI`. + +#### Set Environment to something other than "Development" + +The DeepLinkWrapper component will not handle deep links in the development environment. To be able to test deep linking, you must set the environment to something other than "Development". + +Within the `.env` file, set `envName` to something other than "Development", for example: + +``` +envName=Staging +``` + +Alternatively, within the `DeepLinkWrapper/index.website.js` file you can set the `CONFIG.ENVIRONMENT` to something other than "Development". + +#### Handle deep links in dev on MacOS + +If developing on MacOS, the development desktop app can't handle deeplinks correctly. To be able to test deeplinking back to the app, follow these steps: + +1. Create a "real" build of the desktop app, which can handle deep links, open the build folder, and install the dmg there: + +``` +npm run desktop-build --publish=never +open desktop-build +# Then double-click "NewExpensify.dmg" in Finder window +``` + +2. Even with this build, the deep link may not be handled by the correct app, as the development Electron config seems to intercept it sometimes. To manage this, install [SwiftDefaultApps](https://github.com/Lord-Kamina/SwiftDefaultApps), which adds a preference pane that can be used to configure which app should handle deep links. + +## Google + +### Web + +#### Render the web Sign In with Google button in Development + +The Google Sign In button renders differently in development mode. To prevent confusion +for developers about a possible regression, we decided to not render third party buttons in +development mode. + +To show the Google Sign In button in development mode, you can comment out the following code in the +LoginForm.js file: + +```js +if (CONFIG.ENVIRONMENT === CONST.ENVIRONMENT.DEV) { + return; +} +``` + +#### Port requirements + +Google allows the web app to be hosted at localhost, but according to the +current Google console configuration for the Expensify client ID, it must be +hosted on port 8082. + +### Desktop + +#### Set Environment to something other than "Development" + +The DeepLinkWrapper component will not handle deep links in the development environment. To be able to test deep linking, you must set the environment to something other than "Development". diff --git a/contributingGuides/CONTRIBUTING.md b/contributingGuides/CONTRIBUTING.md index 42db4f642943..ae2b98ece85b 100644 --- a/contributingGuides/CONTRIBUTING.md +++ b/contributingGuides/CONTRIBUTING.md @@ -81,9 +81,9 @@ A job could be fixing a bug or working on a new feature. There are two ways you This is the most common scenario for contributors. The Expensify team posts new jobs to the Upwork job list [here](https://www.upwork.com/ab/jobs/search/?q=Expensify%20React%20Native&sort=recency&user_location_match=2) (you must be signed in to Upwork to view jobs). Each job in Upwork has a corresponding GitHub issue, which will include instructions to follow. You can also view all open jobs in the Expensify/App GH repository by searching for GH issues with the [`Help Wanted` label](https://github.com/Expensify/App/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+Wanted%22). Lastly, you can follow the [@ExpensifyOSS](https://twitter.com/ExpensifyOSS) Twitter account to see a live feed of jobs that are posted. #### Raising jobs and bugs -It’s possible that you found a new bug that we haven’t posted as a job to the [GitHub repository](https://github.com/Expensify/App/issues?q=is%3Aissue). This is an opportunity to raise it and claim the bug bounty. If it's a valid bug that we choose to resolve by deploying it to production — either internally or via an external contributor — then we will compensate you $250 for identifying the bug (we do not compensate for reporting new feature requests). If the bug is fixed by a PR that is not associated with your bug report, then you will not be eligible for the corresponding compensation unless you can find the PR that fixed it and prove your bug report came first. -- Note: If you get assigned the job you proposed **and** you complete the job, this $250 for identifying the improvement is *in addition to* the reward you will be paid for completing the job. -- Note about proposed bugs: Expensify has the right not to pay the $250 reward if the suggested bug has already been reported. Following, if more than one contributor proposes the same bug, the contributor who posted it first in the [#expensify-bugs](https://expensify.slack.com/archives/C049HHMV9SM) Slack channel is the one who is eligible for the bonus. +It’s possible that you found a new bug that we haven’t posted as a job to the [GitHub repository](https://github.com/Expensify/App/issues?q=is%3Aissue). This is an opportunity to raise it and claim the bug bounty. If it's a valid bug that we choose to resolve by deploying it to production — either internally or via an external contributor — then we will compensate you $50 for identifying the bug (we do not compensate for reporting new feature requests). If the bug is fixed by a PR that is not associated with your bug report, then you will not be eligible for the corresponding compensation unless you can find the PR that fixed it and prove your bug report came first. +- Note: If you get assigned the job you proposed **and** you complete the job, this $50 for identifying the improvement is *in addition to* the reward you will be paid for completing the job. +- Note about proposed bugs: Expensify has the right not to pay the $50 reward if the suggested bug has already been reported. Following, if more than one contributor proposes the same bug, the contributor who posted it first in the [#expensify-bugs](https://expensify.slack.com/archives/C049HHMV9SM) Slack channel is the one who is eligible for the bonus. - Note: whilst you may optionally propose a solution for that job on Slack, solutions are ultimately reviewed in GitHub. The onus is on you to propose the solution on GitHub, and/or ensure the issue creator will include a link to your proposal. Please follow these steps to propose a job or raise a bug: diff --git a/contributingGuides/PROPTYPES_CONVERSION_TABLE.md b/contributingGuides/PROPTYPES_CONVERSION_TABLE.md index 4ef1cd5ca655..e7584f82a351 100644 --- a/contributingGuides/PROPTYPES_CONVERSION_TABLE.md +++ b/contributingGuides/PROPTYPES_CONVERSION_TABLE.md @@ -24,7 +24,7 @@ const propTypes = { }; // After -type Props = { +type ComponentProps = { isVisible: boolean; // Consider it as required unless you have proof that it is indeed an optional prop. confirmText: string; // vs. confirmText?: string; @@ -115,7 +115,7 @@ type Input = { type Size = "small" | "medium" | "large"; -type Props = { +type ComponentProps = { unknownData: string[]; // It's not possible to infer the data as it can be anything because of reasons X, Y and Z. diff --git a/contributingGuides/TS_STYLE.md b/contributingGuides/TS_STYLE.md index 414cb9d49ef1..bc62020ffd54 100644 --- a/contributingGuides/TS_STYLE.md +++ b/contributingGuides/TS_STYLE.md @@ -23,6 +23,7 @@ - [1.16 Reusable Types](#reusable-types) - [1.17 `.tsx`](#tsx) - [1.18 No inline prop types](#no-inline-prop-types) + - [1.19 Satisfies operator](#satisfies-operator) - [Exception to Rules](#exception-to-rules) - [Communication Items](#communication-items) - [Migration Guidelines](#migration-guidelines) @@ -82,6 +83,28 @@ type Foo = { type Color = "red" | "blue" | "green"; ``` + - Use `{ComponentName}Props` pattern for prop types. + + ```ts + // BAD + type Props = { + // component's props + }; + + function MyComponent({}: Props) { + // component's code + } + + // GOOD + type MyComponentProps = { + // component's props + }; + + function MyComponent({}: MyComponentProps) { + // component's code + } + ``` + - For generic type parameters, use `T` if you have only one type parameter. Don't use the `T`, `U`, `V`... sequence. Make type parameter names descriptive, each prefixed with `T`. > Prefix each type parameter name to distinguish them from other types. @@ -101,7 +124,7 @@ type Foo = { -- [1.2](#d-ts-extension) **`d.ts` Extension**: Do not use `d.ts` file extension even when a file contains only type declarations. Only exception is the `global.d.ts` file in which third party packages can be modified using module augmentation. Refer to the [Communication Items](#communication-items) section to learn more about module augmentation. +- [1.2](#d-ts-extension) **`d.ts` Extension**: Do not use `d.ts` file extension even when a file contains only type declarations. Only exceptions are `src/types/global.d.ts` and `src/types/modules/*.d.ts` files in which third party packages can be modified using module augmentation. Refer to the [Communication Items](#communication-items) section to learn more about module augmentation. > Why? Type errors in `d.ts` files are not checked by TypeScript [^1]. @@ -358,7 +381,7 @@ type Foo = { -- [1.15](#file-organization) **File organization**: In modules with platform-specific implementations, create `types.ts` to define shared types. Import and use shared types in each platform specific files. +- [1.15](#file-organization) **File organization**: In modules with platform-specific implementations, create `types.ts` to define shared types. Import and use shared types in each platform specific files. Do not use [`satisfies` operator](#satisfies-operator) for platform-specific implementations, always define shared types that complies with all variants. > Why? To encourage consistent API across platform-specific implementations. If you're migrating module that doesn't have a default implement (i.e. `index.ts`, e.g. `getPlatform`), refer to [Migration Guidelines](#migration-guidelines) for further information. @@ -458,6 +481,34 @@ type Foo = { } ``` + + +- [1.19](#satisfies-operator) **Satisfies Operator**: Use the `satisfies` operator when you need to validate that the structure of an expression matches a specific type, without affecting the resulting type of the expression. + + > Why? TypeScript developers often want to ensure that an expression aligns with a certain type, but they also want to retain the most specific type possible for inference purposes. The `satisfies` operator assists in doing both. + + ```ts + // BAD + const sizingStyles = { + w50: { + width: '50%', + }, + mw100: { + maxWidth: '100%', + }, + } as const; + + // GOOD + const sizingStyles = { + w50: { + width: '50%', + }, + mw100: { + maxWidth: '100%', + }, + } satisfies Record; + ``` + ## Exception to Rules Most of the rules are enforced in ESLint or checked by TypeScript. If you think your particular situation warrants an exception, post the context in the `#expensify-open-source` Slack channel with your message prefixed with `TS EXCEPTION:`. The internal engineer assigned to the PR should be the one that approves each exception, however all discussion regarding granting exceptions should happen in the public channel instead of the GitHub PR page so that the TS migration team can access them easily. @@ -472,9 +523,11 @@ This rule will apply until the migration is done. After the migration, discussio - I think types definitions in a third party library is incomplete or incorrect -When the library indeed contains incorrect or missing type definitions and it cannot be updated, use module augmentation to correct them. All module augmentation code should be contained in `/src/global.d.ts`. +When the library indeed contains incorrect or missing type definitions and it cannot be updated, use module augmentation to correct them. All module augmentation code should be contained in `/src/types/modules/*.d.ts`, each library as a separate file. ```ts +// external-library-name.d.ts + declare module "external-library-name" { interface LibraryComponentProps { // Add or modify typings diff --git a/desktop/main.js b/desktop/main.js index 3a153b4d13c5..b19bef060ba9 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -11,7 +11,7 @@ const CONFIG = require('../src/CONFIG').default; const CONST = require('../src/CONST').default; const Localize = require('../src/libs/Localize'); -const port = process.env.PORT || 8080; +const port = process.env.PORT || 8082; const {DESKTOP_SHORTCUT_ACCELERATOR} = CONST; app.setName('New Expensify'); diff --git a/docs/Expensify-Card-revenue share for ExpensifyApproved!-partners.md b/docs/Expensify-Card-revenue share for ExpensifyApproved!-partners.md new file mode 100644 index 000000000000..f9d18da76ef6 --- /dev/null +++ b/docs/Expensify-Card-revenue share for ExpensifyApproved!-partners.md @@ -0,0 +1,22 @@ +--- +title: Expensify Card revenue share for ExpensifyApproved! partners +description: Earn money when your clients adopt the Expensify Card +--- + + +# About +Start making more with us! We're thrilled to announce a new incentive for our US-based ExpensifyApproved! partner accountants. You can now earn additional income for your firm every time your client uses their Expensify Card. We're offering 0.5% of the total Expensify Card spend of your clients in cashback returned to your firm. The more your clients spend, the more cashback your firm receives!
+
This program is currently only available to US-based ExpensifyApproved! partner accountants. + +# How-to +To benefit from this program, complete the following steps +1. Ensure that you are listed as the Primary Contact under your client's domain in Expensify. If you're not currently the Primary Contact for your client, you or your client can follow the instructions outlined in [our help article](https://community.expensify.com/discussion/5749/how-to-add-and-remove-domain-admins#:~:text=Domain%20Admins%20have%20total%20control,a%20member%20of%20the%20domain.) to assign you this role. +2. Add a Business Bank Account to the Primary Contact account. Follow the instructions in [our help article](https://community.expensify.com/discussion/4641/how-to-add-a-deposit-only-bank-account-both-personal-and-business) to get a Business Bank Account added. + +# FAQ +- What if my firm is not permitted to accept revenue share from our clients?
+
We understand that different firms may have different policies. If your firm is unable to accept this revenue share, you can pass the revenue share back to your client to give them an additional 0.5% of cash back using your own internal payment tools.

+How will I know which clients to pay back?
+
Every month you will receive an automated message via new.expensify.com and email providing a breakdown of revenue shared generated per client.

+- What if my firm does not wish to participate in the program?
+
Please reach out to your assigned partner manager at new.expensify.com to inform them you would not like to accept the revenue share nor do you want to pass the revenue share to your clients. diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index 07f9f23bdbbf..209d14de0f48 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -2,7 +2,7 @@ - + Expensify Help @@ -13,20 +13,25 @@ + + + {% seo %} - + + +

-
- - -
+
+ + +
diff --git a/docs/_sass/_colors.scss b/docs/_sass/_colors.scss index fe88f2152e0e..b34a7d13b7f0 100644 --- a/docs/_sass/_colors.scss +++ b/docs/_sass/_colors.scss @@ -1,7 +1,10 @@ $color-green400: #03D47C; $color-green-icons: #8B9C8F; $color-green-borders: #1A3D32; +$color-button-background: #1A3D32; +$color-button-hovered: #2C6755; $color-green-highlightBG: #07271F; +$color-green-highlightBG-hover: #06231c; $color-green-appBG: #061B09; $color-green-hover: #00a862; $color-light-gray-green: #AFBBB0; diff --git a/docs/_sass/_main.scss b/docs/_sass/_main.scss index 720bc95c0732..bc9d19bfca11 100644 --- a/docs/_sass/_main.scss +++ b/docs/_sass/_main.scss @@ -267,8 +267,8 @@ button { } #header-button { - position: absolute; display: block; + padding-right: 24px; @include breakpoint($breakpoint-tablet) { display: none; } @@ -281,7 +281,7 @@ button { margin-left: auto; margin-right: auto; - @include breakpoint($breakpoint-tablet) { + @include breakpoint($breakpoint-desktop) { width: 210px; align-content: normal; display: flex; diff --git a/docs/_sass/_search-bar.scss b/docs/_sass/_search-bar.scss index ace3a7b99ace..ce085878af46 100644 --- a/docs/_sass/_search-bar.scss +++ b/docs/_sass/_search-bar.scss @@ -4,6 +4,7 @@ $color-appBG: $color-green-appBG; $color-highlightBG: $color-green-highlightBG; +$color-highlightBG-hover: $color-green-highlightBG-hover; $color-accent : $color-green400; $color-borders: $color-green-borders; $color-icons: $color-green-icons; @@ -27,6 +28,7 @@ $color-gray-label: $color-gray-label; display: block; top: 0; right: 0; + z-index: 2; } @media only screen and (max-width: $breakpoint-tablet) { @@ -69,7 +71,7 @@ $color-gray-label: $color-gray-label; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.4); - z-index: 2; + z-index: 1; } /* All gsc id & class are Google Search relate gcse_0 is the search bar parent & gcse_1 is the search result list parent */ @@ -156,6 +158,13 @@ label.search-label { font-family: "ExpensifyNeue", "Helvetica Neue", "Helvetica", Arial, sans-serif !important; max-height: 80vh; overflow-y: scroll; + -ms-overflow-style: none; + scrollbar-width: none; +} + +/* Hide the scrollbar */ +.gsc-control-cse::-webkit-scrollbar { + display: none; } .gs-title { @@ -195,3 +204,67 @@ label.search-label { .gsc-resultsbox-visible .gsc-webResult .gsc-result { border-bottom: none; } + + +/* Change Font the Google Search result */ +.gsc-control-cse .gsc-table-result { + font-family: "ExpensifyNeue", "Helvetica Neue", "Helvetica", Arial, sans-serif !important; +} + +/* Change Font result Paragraph color */ +.gsc-results .gs-webResult:not(.gs-no-results-result):not(.gs-error-result) .gs-snippet, .gs-fileFormatType { + color: $color-text; +} + + +/* Change the color of the Google Search Suggestion font */ +.gs-spelling.gs-result { + color: $color-text; +} + +/* Pagination related style */ +.gsc-resultsbox-visible .gsc-results .gsc-cursor-box { + text-align: center; +} + +.gsc-resultsbox-visible .gsc-results .gsc-cursor-box .gsc-cursor-page { + margin: 4px; + width: 28px; + height: 28px; + border-radius: 25px; + display: inline-block; + line-height: 2.5; + background-color: $color-accent; + font-weight: bold; + font-size: 11px; +} + + +/* Change the color & background of Google Search Pagination */ +.gsc-cursor-next-page, +.gsc-cursor-final-page { + color: $color-text; + background-color: $color-appBG; +} + +/* Change the color & background of Google Search Current Page */ +.gsc-resultsbox-visible .gsc-results .gsc-cursor-box .gsc-cursor-page.gsc-cursor-current-page { + background-color: $color-accent; + color: $color-text; + + &:hover { + text-decoration: none; + background-color: $color-accent; + } +} + +/* Change the color & background of Google Search of Other Page */ +.gsc-resultsbox-visible .gsc-results .gsc-cursor-box .gsc-cursor-page { + background-color: $color-button-background; + color: $color-text; + + &:hover { + background-color: $color-button-hovered; + text-decoration: none; + } +} diff --git a/docs/articles/other/Enable-Location-Access-on-Web.md b/docs/articles/other/Enable-Location-Access-on-Web.md new file mode 100644 index 000000000000..6cc0d19e4cde --- /dev/null +++ b/docs/articles/other/Enable-Location-Access-on-Web.md @@ -0,0 +1,55 @@ +--- +title: Enable Location Access on Web +description: How to enable location access for Expensify websites on your browser +--- + + +# About + +If you'd like to use features that rely on your current location you will need to enable location permissions for Expensify. You can find instructions for how to enable location settings on the three most common web browsers below. If your browser is not in the list then please do a web search for your browser and "enable location settings". + +# How-to + + +### Chrome +1. Open Chrome +2. At the top right, click the three-dot Menu > Settings +3. Click "Privacy and Security" and then "Site Settings" +4. Click Location +5. Check the "Not allowed to see your location" list to make sure expensify.com and new.expensify.com are not listed. If they are, click the delete icon next to them to allow location access + +[Chrome help page](https://support.google.com/chrome/answer/142065) + +### Firefox + +1. Open Firefox +2. In the URL bar enter "about:preferences" +3. On the left hand side select "Privacy & Security" +4. Scroll down to Permissions +5. Click on Settings next to Location +6. If location access is blocked for expensify.com or new.expensify.com, you can update it here to allow access + +[Firefox help page](https://support.mozilla.org/en-US/kb/permissions-manager-give-ability-store-passwords-set-cookies-more) + +### Safari +1. In the top menu bar click Safari +2. Then select Settings > Websites +3. Click Location on the left hand side +4. If expensify.com or new.expensify.com have "Deny" set as their access, update it to "Ask" or "Allow" + +Ask: The site must ask if it can use your location. +Deny: The site can’t use your location. +Allow: The site can always use your location. + +[Safari help page](https://support.apple.com/guide/safari/websites-ibrwe2159f50/mac) diff --git a/docs/articles/other/Expensify-Chat-For-Admins.md b/docs/articles/other/Expensify-Chat-For-Admins.md new file mode 100644 index 000000000000..247b2b0e03d0 --- /dev/null +++ b/docs/articles/other/Expensify-Chat-For-Admins.md @@ -0,0 +1,26 @@ +--- +title: Expensify Chat for Admins +description: Best Practices for Admins settings up Expensify Chat +--- + +## Overview +Expensify Chat is an incredible way to build a community and foster long-term relationships between event producers and attendees, or attendees with each other. Admins are a huge factor in the success of the connections built in Expensify Chat during the events, as they are generally the drivers of the conference schedule, and help ensure safety and respect is upheld by all attendees both on and offline. + +## Getting Started +We’ve rounded up some resources to get you set up on Expensify Chat and ready to start connecting with your session attendees: +- [How to get set up and start using Expensify Chat](https://help.expensify.com/articles/other/Everything-About-Chat#how-to-use-chat-in-expensify) +- [How to format text in Expensify Chat](https://help.expensify.com/articles/other/Everything-About-Chat#how-to-format-text) +- [How to flag content and/or users for moderation](https://help.expensify.com/articles/other/Everything-About-Chat#flagging-content-as-offensive) + +## Admin Best Practices +In order to get the most out of Expensify Chat, we created a list of best practices for admins to review in order to use the tool to its fullest capabilities. + +**During the conference:** +- At a minimum, send 3 announcements throughout the day to create awareness of any sessions, activations, contests, or parties you want to promote. +- Communicate with the Expensify Team in the #admins room if you see anything you have questions about or are unsure of to make sure we’re resolving issues together ASAP. +- As an admin, It’s up to you to help keep your conference community safe and respectful. [Flag any content for moderation](https://help.expensify.com/articles/other/Everything-About-Chat#flagging-content-as-offensive) that does not fit your culture and values to keep chatrooms a positive experience for everyone involved. + +**After the conference:** +- The rooms will all stay open after the conference ends, so encourage speakers to keep engaging as long as the conversation is going in their session room. +- Continue sharing photos and videos from the event or anything fun in #social as part of a wrap up for everyone. +- Use the #announce room to give attendees a sneak preview of your next event. diff --git a/docs/articles/other/Expensify-Chat-For-Conference-Attendees.md b/docs/articles/other/Expensify-Chat-For-Conference-Attendees.md new file mode 100644 index 000000000000..3d30237dca5a --- /dev/null +++ b/docs/articles/other/Expensify-Chat-For-Conference-Attendees.md @@ -0,0 +1,35 @@ +--- +title: Expensify Chat for Conference Attendees +description: Best Practices for Conference Attendees +--- + +## Overview +Expensify Chat is the best way to meet and network with other event attendees. No more hunting down your contacts by walking the floor or trying to find someone in crowds at a party. Instead, you can use Expensify Chat to network and collaborate with others throughout the conference. + +To help get you set up for a great event, we’ve created a guide to help you get the most out of using Expensify Chat at the event you’re attending. + +## Getting Started +We’ve rounded up some resources to get you set up on Expensify Chat and ready to start connecting with your fellow attendees: + +- [How to get set up and start using Expensify Chat](https://help.expensify.com/articles/other/Everything-About-Chat#how-to-use-chat-in-expensify) +- [How to format text in Expensify Chat](https://help.expensify.com/articles/other/Everything-About-Chat#how-to-format-text) +- [How to flag content and/or users for moderation](https://help.expensify.com/articles/other/Everything-About-Chat#flagging-content-as-offensive) + +## Chat Best Practices +To get the most out of your experience at your conference and engage people in a meaningful conversation that will fulfill your goals instead of turning people off, here are some tips on what to do and not to do as an event attendee using Expensify Chat: + +**Do:** +- Chat about non-business topics like where the best coffee is around the event, what great lunch options are available, or where the parties are happening that night! +- Share pictures of your travel before the event to hype everyone up, during the event if you met that person you’ve been meaning to see for years, or a fun pic from a party. +- Try to create fun groups with your fellow attendees around common interests like touring a local sight, going for a morning run, or trying a famous restaurant. + +**Don't:** +- Pitch your services in public rooms like #social or speaking session rooms. +- Start a first message with a stranger with a sales pitch. +- Discuss controversial topics such as politics, religion, or anything you wouldn’t say on a first date. +- In general just remember that you are still here for business, your profile is public, and you’re representing yourself & company, so do not say anything you wouldn’t feel comfortable sharing in a business setting. + +**Pro-Tips:** +Get active in Chat early and often by having real conversations around thought leadership or non-business discussions to stand out from the crowd! Also if you’re in a session and are afraid to ask a question, just ask in the chat room to make sure you can discuss it with the speaker after the session ends. + +By following these tips you’ll ensure that your messages will not be [flagged for moderation](https://help.expensify.com/articles/other/Everything-About-Chat#flagging-content-as-offensive) and you will not mess it up for the rest of us. diff --git a/docs/articles/other/Expensify-Chat-For-Conference-Speakers.md b/docs/articles/other/Expensify-Chat-For-Conference-Speakers.md new file mode 100644 index 000000000000..5bd52425d92b --- /dev/null +++ b/docs/articles/other/Expensify-Chat-For-Conference-Speakers.md @@ -0,0 +1,39 @@ +--- +title: Expensify Chat for Conference Speakers +description: Best Practices for Conference Speakers +--- + +## Overview +Are you a speaker at an event? Great! We're delighted to provide you with an extraordinary opportunity to connect with your session attendees using Expensify Chat — before, during, and after the event. Expensify Chat offers a powerful platform for introducing yourself and your topic, fostering engaging discussions about your presentation, and maintaining the conversation with attendees even after your session is over. + +## Getting Started +We’ve rounded up some resources to get you set up on Expensify Chat and ready to start connecting with your session attendees: + +- [How to get set up and start using Expensify Chat](https://help.expensify.com/articles/other/Everything-About-Chat#how-to-use-chat-in-expensify) +- [How to format text in Expensify Chat](https://help.expensify.com/articles/other/Everything-About-Chat#how-to-format-text) +- [How to flag content and/or users for moderation](https://help.expensify.com/articles/other/Everything-About-Chat#flagging-content-as-offensive) + +## Setting Up a Chatroom for Your Session: Checklist +To make the most of Expensify Chat for your session, here's a handy checklist: +- Confirm that your session has an Expensify Chat room, and have the URL link ready to share with attendees in advance. + - You can find the link by clicking on the avatar for your chatroom > “Share Code” > “Copy URL to dashboard” +- Join the chat room as soon as it's ready to begin engaging with your audience right from the start. +- Consider having a session moderator with you on the day to assist with questions and discussions while you're presenting. +- Include the QR code for your session's chat room in your presentation slides. Displaying it prominently on every slide ensures that attendees can easily join the chat throughout your presentation. + +## Tips to Enhance Engagement Around Your Session +By following these steps and utilizing Expensify Chat, you can elevate your session to promote valuable interactions with your audience, and leave a lasting impact beyond the conference. We can't wait to see your sessions thrive with the power of Expensify Chat! + +**Before the event:** +- Share your session's QR code or URL on your social media platforms, your website or other platforms to encourage attendees to join the conversation early on. +- Encourage attendees to ask questions in the chat room before the event, enabling you to tailor your session and address their specific interests. + +**During the event:** +- Keep your QR code readily available during the conference by saving it as a photo on your phone or setting it as your locked screen image. This way, you can easily share it with others you meet. +- Guide your audience back to the QR code and encourage them to ask questions, fostering interactive discussions. + +**After the event:** +- Continue engaging with attendees by responding to their questions and comments, helping you expand your audience and sustain interest. +- Share your presentation slides after the event as well as any photos from your session, allowing attendees to review and share your content with their networks if they want to. + +If you have any questions on how Expensify Chat works, head to our guide [here](https://help.expensify.com/articles/other/Everything-About-Chat). diff --git a/docs/articles/other/Insights.md b/docs/articles/other/Insights.md new file mode 100644 index 000000000000..682c2a251228 --- /dev/null +++ b/docs/articles/other/Insights.md @@ -0,0 +1,100 @@ +--- +title: Custom Reporting and Insights +description: How to get the most out of the Custom Reporing and Insights +--- + +{% raw %} +# What is Custom Reporting and Insights? +The Insights dashboard allows you to monitor all aspects of company spend across categories, employees, projects, departments, and more. You can see trends in real time, forecast company budgets, and build unlimited custom reports with help from our trained specialist team. + +![Insights Pie Chart](https://help.expensify.com/assets/images/insights-chart.png){:width="100%"} +## Review your Insights data + +1. Navigate to your [Insights page](https://www.expensify.com/expenses?param={"fromInsightsTab":true,"viewMode":"charts"}), located in the left hand menu +2. Select a specific date range (the default view has the current month pre-selected) +3. Use the filter options to select the categories, tags, employees etc that you want insights on +4. Make sure that View in the top right corner is set to the pie chart icon +5. You can view any dataset in more detail by clicking in the “View Raw Data” column + +## Export your Insights data + +1. Switch the View in the top right corner of the [Insights page](https://www.expensify.com/expenses?param={"fromInsightsTab":true,"viewMode":"charts"}) to the lists icon +2. Select the expenses you want to export, either by selecting individual expenses, or checking the select all box (next to Date at the top) +3. Select **Export To** in the top right hand corner to download the report as a .csv file + +## Create a Custom Export Report for your Expenses + +1. Navigate to **Settings > Account > Preferences > scroll down to CSV Export Formats** +2. Build up a report using these [formulas](https://community.expensify.com/discussion/5795/deep-dive-expense-level-formula/p1?new=1) +3. Click the **Custom Export** button on the Insights page and your Account Manager will help get you started on building up your report + +## Create a Custom Export Report for your Policy + +1. Navigate to **Settings > Policies > Group > [Policy Name] > Export Formats** +2. Build up a report using these [formulas](https://community.expensify.com/discussion/5795/deep-dive-expense-level-formula/p1?new=1) +3. If you need any help, click the **Support** button on the top left to contact your Account Manager + +# FAQs + +#### Can I share my custom export report? + +If you would like to create a custom export report that can be shared with other policy admins, you can create these by navigating to the **[Settings > Policies > Group > [Policy Name] > Export Formats](https://www.expensify.com/admin_policies?param={"section":"group"})** page. Custom export reports created under **Settings > Account > Preferences** page are only available to the member who created them. + +#### Can I put expenses from different policies on the same report? + +Custom export reports created under Settings > Account > Preferences page are able to export expenses from multiple policies, and custom export formats created under Settings > Policies > Group > [Policy Name] > Export Formats are for expenses reported under that policy only. + +#### Are there any default export reports available? + +Yes! We have [seven default reports](https://community.expensify.com/discussion/5602/deep-dive-default-export-templates) available to export directly from the Reports page: + +- **All Data** - Expense Level Export** - the name says it all! This is for the people who want ALL the details from their expense reports. We're talking Tax, Merchant Category Codes, Approvers - you name it, this report's got it! +- **All Data** - Report Level Export - this is the report for those who don't need to see each individual expense but want to see a line by line breakdown at a report level - submitter, total amount, report ID - that kind of stuff +- **Basic Export** - this is the best way to get a simple breakdown of all your expenses - just the basics +- **Canadian Multiple Tax Export** - tax, GST, PST...if you need to know tax then this is the export you want! +- **Category Export** - want to see a breakdown of your expenses by Category? This is the export you +- **Per Diem Export** - the name says it all +- **Tag Export** - much like the Category Export, but for Tags + +*To note: these reports will be emailed directly to your email address rather than downloaded on your computer.* + +#### How many expenses can I export in one report? +The custom export reports are best for small-to-medium chunks of data. If you want to export large amounts of data, we recommend you use a [default export report](https://community.expensify.com/discussion/5602/deep-dive-default-export-templates) that you can run from the Reports page. + +#### What other kinds of export reports can my Account Manager help me create? + +We’ve built a huge variety of custom reports for customers, so make sure to reach out to your Account Manager for more details. Some examples of custom reports we’ve build for customers before are: + +- Accrual Report +- Aged Approval Reports +- Attendee Reporting +- Audit Report +- Candidate Spend +- Category Spend Report +- Department/Project Spend Report +- Duplication Report +- Duty of Care +- Efficiency +- Employee Bank Account Status +- Employee Details +- Employee Roles +- Expense Authorizations by Country +- Expense Reports by Country +- Expense Reports not posted to finance system +- Foreign Currency Transaction +- Fringe Benefit Tax Report +- HR Report +- Invoice Billed Transaction Reconciliation +- Mileage Reports +- Out of Pocket Expenses for Reimbursement +- Per Diem Report +- Reconciliation: Accounting, Bank Statement, Billed Transaction +- Rejected Report +- Travel Rule Class +- Travel Spend +- Unposted Cash Advance Report +- Unposted Procurement Aging Report +- Unposted Travel Aging Report +- Vendor Spend +- … or anything you can imagine! +{% endraw %} \ No newline at end of file diff --git a/docs/articles/playbooks/Expensify-Chat-Playbook-for-Conferences.md b/docs/articles/playbooks/Expensify-Chat-Playbook-for-Conferences.md index c5a06a3b5d3e..8f806bb03146 100644 --- a/docs/articles/playbooks/Expensify-Chat-Playbook-for-Conferences.md +++ b/docs/articles/playbooks/Expensify-Chat-Playbook-for-Conferences.md @@ -1,113 +1,93 @@ --- -title: Expensify Chat Playbook for Conferences +title: Expensify Chat Playbook for Conferences description: Best practices for how to deploy Expensify Chat for your conference --- ## Overview - To help make setting up Expensify Chat for your event and your attendees super simple, we’ve created a guide for all of the technical setup details. - ## Who you are - -As a conference organizer, you’re expected to amaze and inspire attendees. You want attendees to get to the right place on time, engage with the speakers, and create relationships with each other that last long after the conference is done. Enter Expensify Chat, a free feature that allows attendees to interact with organizers and other attendees in realtime. With Expensify Chat, you can: +As a conference organizer, you’re expected to amaze and inspire attendees. You want attendees to get to the right place on time, engage with the speakers, and create relationships with each other that last long after the conference is done. Enter Expensify Chat, a free feature that allows attendees to interact with organizers and other attendees in realtime. With Expensify Chat, you can: - Communicate logistics and key information -- Foster conference-wide attendee networking -- Organize discussions by topic and audience -- Continue conversations long after the event itself +- Foster conference wide attendee networking +- Organize conversations by topic and audience +- Continue conversations long after the event itself - Digitize attendee social interaction +- Create an inclusive environment for virtual attendees -Sounds good? Great! In order to ensure your team, speakers, and attendees have the best experience possible, we’ve created a guide on how to use Expensify Chat at your event. +Sounds good? Great! In order to ensure your team, your speakers, and your attendees have the best experience possible, we’ve created a guide on how to use Expensify Chat at your event. -_Let’s get started!_ +*Let’s get started!* ## Support +Connect with your dedicated account manager in any new.expensify.com #admins room. Your account manager is excited to brainstorm the best ways to make the most out of your event and work through any questions you have about the setup steps below. -Connect with your dedicated Expensify account manager in any new.expensify.com #admins room. Your account manager is excited to brainstorm the best ways to make the most out of your event and work through any questions you have about the setup steps below. - - -## How to set up your conference on Expensify Chat +We also have a number of [moderation tools](https://help.expensify.com/articles/other/Everything-About-Chat#flagging-content-as-offensive) available to admins to help make sure your event is seamless, safe, and fun! +## Step by step instructions for setting up your conference on Expensify Chat Based on our experience running conferences atop Expensify Chat, we recommend the following simple steps: -### Step 1: Create your event workspace in Expensify - +### Step 1: Create your event workspace in Expensify To create your event workspace in Expensify: -1. In new.expensify.com: “+” > “New workspace” -2. Name the workspace (e.g. “ExpensiCon”) +1. In [new.expensify.com](https://new.expensify.com): “+” > “New workspace” +1. Name the workspace (e.g. “ExpensiCon”) ### Step 2: Set up all the Expensify Chat rooms you want to feature at your event - -*Protip*: Your Expensify account manager can complete this step with you. Chat them in #admins on new.expensify.com to coordinate! +**Protip**: Your Expensify account manager can complete this step with you. Chat them in #admins on new.expensify.com to coordinate! To create a new chat room: 1. Go to [new.expensify.com](https://new.expensify.com) -2. Go to “+” > New room -3. Name the room (e.g. “#social”) -4. Select the workspace created in step 1 -5. Select “Public” visibility -6. “Create room” > Copy/Paste room URL for use later -7. Repeat for each room +1. Go to “+” > New room +1. Name the room (e.g. “#social”) +1. Select the workspace created in step 1 +1. Select “Public” visibility +1. Repeat for each room For an easy-to-follow event, we recommend creating these chat rooms: -- *#announce* - This room will be used as your main announcement channel, and should only be used by organizers to announce schedule updates or anything important that your attendees need to know. Everyone in your policy will be invited to this channel, but chatting in here isn’t encouraged -- so to keep the noise to a minimum! -- *#social* - This room will include all attendees, speakers, and members of your organizing team. You can use this room to discuss social events, happy hours, dinners, or encourage attendees to mingle, share photos and connect. -- *Create an individual room for each session* - Attendees will be able to engage with the speaker/session leader and can ask questions about their content either before/during/after the session. -- *Create a room with your Expensify account manager/s* - We can use this room to coordinate using Expensify Chat before, during, and after the event. +- **#social** - This room will include all attendees, speakers, and members of your organizing team. You can use this room to discuss social events, happy hours, dinners, or encourage attendees to mingle, share photos and connect. +- **#announcements** - This room will be used as your main announcement channel, and should only be used by organizers to announce schedule updates or anything important that your attendees need to know. Everyone in your policy will be invited to this channel, but chatting in here isn’t encouraged so to keep the noise to a minimum. +- **Create an individual room for each session** - Attendees will be able to engage with the speaker/session leader and can ask questions about their content either before/during/after the session. +- **Create a room with your Expensify account manager/s** - We can use this room to coordinate using Expensify Chat before, during, and after the event. -### Step 3: Add chat room QR codes to the applicable session slide deck +**Protip** Check out our [moderation tools](https://help.expensify.com/articles/other/Everything-About-Chat#flagging-content-as-offensive) to help flag comments deemed to be spam, inconsiderate, intimidating, bullying, harassment, assault. On any comment just click the flag icon to moderate conversation. +### Step 3: Add chat room QR codes to the applicable session slide deck Gather QR codes: 1. Go to [new.expensify.com](https://new.expensify.com) -2. Click into a room and click the room name or avatar in the top header -3. Go into Share Code -4. Download or screenshot the QR code image - -Add the QR code to every slide so that if folks forget to scan the QR code at the beginning of the presentation, they can still join the discussion. - -### Step 4: Train speakers on how to use chat during their sessions - -*Protip*: Copy and paste a link to this section and share it directly with your speakers -*Protip*: Your account manager can communicate this training to your speakers. Chat with them in #admins on new.expensify.com to coordinate! - -Are you a speaker at an event? Great! Expensify Chat is the perfect way to connect with your session attendees before, during, and after the event. Use Expensify Chat to introduce yourself and your topic, and open the floor for attendees to ask questions and participate in discussion about your presentation, as well as connect with other attendees that were in the room. Here’s a quick list to help you best prepare for your session by using Expensify Chat: - -1. Ensure your session has an Expensify Chat room and that you know the URL link to your session so you can share with attendees ahead of time -2. Join the chat room ahead of the event so you can start engaging with your session’s attendees from the get-go -3. Make sure you have a session moderator with you on presentation day to help moderate questions and facilitate discussion while you’re busy speaking -4. Ensure your session slides include the QR code for your session chat room. We’d recommend making sure the QR code is visible on every page of your deck in case an attendee didn’t join at the beginning. -5. Engage with attendees after your session to continue the discussion around your topic! - -*Messaging Suggestions* - -- Default: Welcome to [CONFERENCE NAME]! This is the [SESSION TITLE] chat room. Please use this room to chat with each other, submit questions about today's presentation, and to chat directly with [SPEAKER NAME] after the session wraps up. -- Custom: As part of pre-conference speaker outreach we should allow speakers to change this message and use the default if they don’t respond.” - -### Step 5: Plan out your messaging and cadence before the event begins - -Expensify Chat is a great place to provide updates leading up to your event -- share news, get folks excited about speakers, and let attendees know about crucial event information like recommended attire, travel info, and more. +1. Click into a room and click the room name or avatar in the top header +1. Go into Share Code +1. Screenshot the QR code to add to your deck -### Step 6: Update your rooms throughout the event +Add the QR code to every slide so that if folks forget to scan the QR code at the beginning of the presentation, they can still join the discussion. -We find chat to be a powerful way to not only engage your attendees, but direct them in realtime to get exactly where they need to go: +### Step 4: Plan out your messaging and cadence before the event begins +Expensify Chat is a great place to provide updates leading up to your event -- share news, get folks excited about speakers, and let attendees know of crucial event information like recommended attire, travel info, and more. For example, you might consider: -- #announce: Use this room to make announcements such as what’s coming up next, where and when social events are taking place, or announcing the sponsor floor is open to the entire conference. Only workspace admins can post in this room. -- #social: Have your employees in this room sharing fun photos, stoking conversations, and responding to any questions or feedback. -- Speaker rooms: Encourage your employees to jump in to comment on content and nudge attendees to engage with each other during sessions. +**Prep your announcements:** +- Create a document containing drafts of the key messages you intend to send throughout the day. +- If your event's agenda is broken up into hourly blocks, create a separate section for each hour of the event, to make it easy to find the correct section at the right time. +- Start each day with a review of the daily agenda, such as a bullet list summarizing what's happening hour by hour. -*Protip*: Expensify Chat has moderation tools to help flag comments deemed to be spam, inconsiderate, intimidating, bullying, harassment, assault. On any comment, just click the flag icon to moderate conversation. +**Post your updates:** +- Designate a team member to post each update in #announce at the designated time. +- Each hour, send a message listing exactly what is happening next – if there are multiple sessions happening simultaneously, list out each, along with a description of the session, a reminder of where it's located, and (most importantly) a link to the chat room for that session +- Write the messages in [markdown format](https://help.expensify.com/articles/other/Everything-About-Chat#how-to-format-text), such that they can be copy/pasted directly into Expensify Chat for sending. + - If there is some formatting issue upon posting, no problem: just edit the comment after sending, and it'll be fixed for everyone. +- We’d also recommend posting your updates on new lines so that if someone has a question about a certain item they can ask in a thread pertaining to that topic, rather than in one consolidated block. -### Step 7: Follow up with attendees after the event +**Protip**: Your account manager can help you create this document, and would be happy to send each message at the appointed time for you. -Continue the connections by using Expensify Chat to keep your conference community connected. Encourage attendees to share photos, their favorite memories, funny stories, and more. +### Step 5: Share Expensify Chat How-To Resources with Speakers, Attendees, Admins +We’ve created a few helpful best practice docs for your speakers, admins, and attendees to help navigate using Expensify Chat at your event. Feel free to share the links below with them! -- We’d recommend creating a draft of all of your reminders that you plan to send in the #announce (or #social) room throughout the event. -- A post in the morning outlining the full agenda, and then before each event as it happens throughout the day, is recommended. Be sure to include details like timings, locations, and any special detail like attire to help attendees feel prepared. -- Use markdown when posting updates so that your messages are easy to read. -- We also recommend posting your updates on new lines so that if someone has a question about a certain item they can ask in a thread pertaining to that topic, rather than in one consolidated block. +- [Expensify Chat for Conference Attendees](https://help.expensify.com/articles/other/Expensify-Chat-For-Conference-Attendees) +- [Expensify Chat for Conference Speakers](https://help.expensify.com/articles/other/Expensify-Chat-For-Conference-Speakers) +- [Expensify Chat for Admins](https://help.expensify.com/articles/other/Expensify-Chat-For-Admins) -## You’re all set! +### Step 6: Follow up with attendees after the event +Continue the connections by using Expensify Chat to keep your conference community connected. Encourage attendees to share photos, their favorite memories, funny stories, and more. -Once you've completed the above steps, you're ready to host your conference on Expensify Chat! Any questions? Just reach out to your Expensify account manager in your new.expensify.com #admins room. +## Conclusion +Once you have completed the above steps you are ready to host your conference on Expensify Chat! Let your account manager know any questions you have over in your [new.expensify.com](https://new.expensify.com) #admins room and start driving activity in your Expensify Chat rooms. Once you’ve reviewed this doc you should have the foundations in place, so a great next step is to start training your speakers on how to use Expensify Chat for their sessions. Coordinate with your account manager to make sure everything goes smoothly! diff --git a/docs/articles/playbooks/Expensify-Playbook-for-Small-to-Medium-Sized-Businesses.md b/docs/articles/playbooks/Expensify-Playbook-for-Small-to-Medium-Sized-Businesses.md index 849932a33c2d..a4004dbe1b88 100644 --- a/docs/articles/playbooks/Expensify-Playbook-for-Small-to-Medium-Sized-Businesses.md +++ b/docs/articles/playbooks/Expensify-Playbook-for-Small-to-Medium-Sized-Businesses.md @@ -209,7 +209,7 @@ Here’s how to enable it: - *Employees* - We recommend a low limit for most employees, roughly double the size of the maximum daily spend – such as $1000. - *Execs* - We recommend a higher limit for executives, roughly 10x the limit of a non-executive employee (eg, $10,000). -Once the Expensify Cards have been assigned, each employee will be prompted to enter their mailing address so they can receive their physical card. In the meantime, a digital card will be ready to use immediately. +Once the Expensify Cards have been assigned, each employee will be prompted to enter their mailing address so they can receive their physical card. In the meantime, a virtual card will be ready to use immediately. If you have an accounting system we directly integrate with, check out how we take automation a step further with [Continuous Reconciliation](https://community.expensify.com/discussion/7335/faq-what-is-the-expensify-card-auto-reconciliation-process). We’ll create an Expensify Card clearing and liability account for you. Each time settlement occurs, we’ll take the total amount of your purchases and create a journal entry that credits the settlement account and debits the liability account - saving you hours of manual reconciliation work at the end of your statement period. diff --git a/docs/articles/request-money/Request-and-Split-Bills.md b/docs/articles/request-money/Request-and-Split-Bills.md index a2c63cf6f8f7..bb27cd75c742 100644 --- a/docs/articles/request-money/Request-and-Split-Bills.md +++ b/docs/articles/request-money/Request-and-Split-Bills.md @@ -16,7 +16,10 @@ These two features ensure you can live in the moment and settle up afterward. # How to Request Money - Select the Green **+** button and choose **Request Money** -- Enter the amount **$** they owe and click **Next** +- Select the relevant option: + - **Manual:** Enter the merchant and amount manually. + - **Scan:** Take a photo of the receipt to have the merchant and amount auto-filled. + - **Distance:** Enter the details of your trip, plus any stops along the way, and the mileage and amount will be automatically calculated. - Search for the user or enter their email! - Enter a reason for the request (optional) - Click **Request!** diff --git a/docs/assets/images/insights-chart.png b/docs/assets/images/insights-chart.png new file mode 100644 index 0000000000000000000000000000000000000000..7b10c8c92d8d84d9e5e5dc6aae3f2b8c2984e89f GIT binary patch literal 201605 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

dOTy?T~rDeh#gh4p@X$b1vj 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