Index: frontend/node_modules/es-abstract/2022/AddEntriesFromIterable.js
===================================================================
--- frontend/node_modules/es-abstract/2022/AddEntriesFromIterable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/AddEntriesFromIterable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,44 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var inspect = require('object-inspect');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var GetIterator = require('./GetIterator');
+var IsCallable = require('./IsCallable');
+var IteratorClose = require('./IteratorClose');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+var ThrowCompletion = require('./ThrowCompletion');
+
+// https://262.ecma-international.org/10.0/#sec-add-entries-from-iterable
+
+module.exports = function AddEntriesFromIterable(target, iterable, adder) {
+	if (!IsCallable(adder)) {
+		throw new $TypeError('Assertion failed: `adder` is not callable');
+	}
+	if (iterable == null) {
+		throw new $TypeError('Assertion failed: `iterable` is present, and not nullish');
+	}
+	var iteratorRecord = GetIterator(iterable);
+	while (true) {
+		var next = IteratorStep(iteratorRecord);
+		if (!next) {
+			return target;
+		}
+		var nextItem = IteratorValue(next);
+		if (!isObject(nextItem)) {
+			var error = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem)));
+			return IteratorClose(iteratorRecord, error);
+		}
+		try {
+			var k = Get(nextItem, '0');
+			var v = Get(nextItem, '1');
+			Call(adder, target, [k, v]);
+		} catch (e) {
+			return IteratorClose(iteratorRecord, ThrowCompletion(e));
+		}
+	}
+};
Index: frontend/node_modules/es-abstract/2022/AddToKeptObjects.js
===================================================================
--- frontend/node_modules/es-abstract/2022/AddToKeptObjects.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/AddToKeptObjects.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var SLOT = require('internal-slot');
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var ClearKeptObjects = require('./ClearKeptObjects');
+
+// https://262.ecma-international.org/12.0/#sec-addtokeptobjects
+
+module.exports = function AddToKeptObjects(object) {
+	if (!isObject(object)) {
+		throw new $TypeError('Assertion failed: `object` must be an Object');
+	}
+	var arr = SLOT.get(ClearKeptObjects, '[[es-abstract internal: KeptAlive]]');
+	arr[arr.length] = object;
+};
Index: frontend/node_modules/es-abstract/2022/AdvanceStringIndex.js
===================================================================
--- frontend/node_modules/es-abstract/2022/AdvanceStringIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/AdvanceStringIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+'use strict';
+
+var CodePointAt = require('./CodePointAt');
+
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger');
+
+// https://262.ecma-international.org/12.0/#sec-advancestringindex
+
+module.exports = function AdvanceStringIndex(S, index, unicode) {
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
+		throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
+	}
+	if (typeof unicode !== 'boolean') {
+		throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
+	}
+	if (!unicode) {
+		return index + 1;
+	}
+	var length = S.length;
+	if ((index + 1) >= length) {
+		return index + 1;
+	}
+	var cp = CodePointAt(S, index);
+	return index + cp['[[CodeUnitCount]]'];
+};
Index: frontend/node_modules/es-abstract/2022/ApplyStringOrNumericBinaryOperator.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ApplyStringOrNumericBinaryOperator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ApplyStringOrNumericBinaryOperator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,77 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var HasOwnProperty = require('./HasOwnProperty');
+var ToNumeric = require('./ToNumeric');
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var NumberAdd = require('./Number/add');
+var NumberBitwiseAND = require('./Number/bitwiseAND');
+var NumberBitwiseOR = require('./Number/bitwiseOR');
+var NumberBitwiseXOR = require('./Number/bitwiseXOR');
+var NumberDivide = require('./Number/divide');
+var NumberExponentiate = require('./Number/exponentiate');
+var NumberLeftShift = require('./Number/leftShift');
+var NumberMultiply = require('./Number/multiply');
+var NumberRemainder = require('./Number/remainder');
+var NumberSignedRightShift = require('./Number/signedRightShift');
+var NumberSubtract = require('./Number/subtract');
+var NumberUnsignedRightShift = require('./Number/unsignedRightShift');
+var BigIntAdd = require('./BigInt/add');
+var BigIntBitwiseAND = require('./BigInt/bitwiseAND');
+var BigIntBitwiseOR = require('./BigInt/bitwiseOR');
+var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR');
+var BigIntDivide = require('./BigInt/divide');
+var BigIntExponentiate = require('./BigInt/exponentiate');
+var BigIntLeftShift = require('./BigInt/leftShift');
+var BigIntMultiply = require('./BigInt/multiply');
+var BigIntRemainder = require('./BigInt/remainder');
+var BigIntSignedRightShift = require('./BigInt/signedRightShift');
+var BigIntSubtract = require('./BigInt/subtract');
+var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift');
+
+// https://262.ecma-international.org/12.0/#sec-applystringornumericbinaryoperator
+
+// https://262.ecma-international.org/12.0/#step-applystringornumericbinaryoperator-operations-table
+var table = {
+	'**': [NumberExponentiate, BigIntExponentiate],
+	'*': [NumberMultiply, BigIntMultiply],
+	'/': [NumberDivide, BigIntDivide],
+	'%': [NumberRemainder, BigIntRemainder],
+	'+': [NumberAdd, BigIntAdd],
+	'-': [NumberSubtract, BigIntSubtract],
+	'<<': [NumberLeftShift, BigIntLeftShift],
+	'>>': [NumberSignedRightShift, BigIntSignedRightShift],
+	'>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift],
+	'&': [NumberBitwiseAND, BigIntBitwiseAND],
+	'^': [NumberBitwiseXOR, BigIntBitwiseXOR],
+	'|': [NumberBitwiseOR, BigIntBitwiseOR]
+};
+
+module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) {
+	if (typeof opText !== 'string' || !HasOwnProperty(table, opText)) {
+		throw new $TypeError('Assertion failed: `opText` must be a valid operation string');
+	}
+	if (opText === '+') {
+		var lprim = ToPrimitive(lval);
+		var rprim = ToPrimitive(rval);
+		if (typeof lprim === 'string' || typeof rprim === 'string') {
+			var lstr = ToString(lprim);
+			var rstr = ToString(rprim);
+			return lstr + rstr;
+		}
+		/* eslint no-param-reassign: 1 */
+		lval = lprim;
+		rval = rprim;
+	}
+	var lnum = ToNumeric(lval);
+	var rnum = ToNumeric(rval);
+	if (Type(lnum) !== Type(rnum)) {
+		throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ');
+	}
+	var Operation = table[opText][typeof lnum === 'bigint' ? 1 : 0];
+	return Operation(lnum, rnum);
+};
Index: frontend/node_modules/es-abstract/2022/ArrayCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ArrayCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ArrayCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
+var $RangeError = require('es-errors/range');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength');
+var $setProto = require('set-proto');
+
+// https://262.ecma-international.org/12.0/#sec-arraycreate
+
+module.exports = function ArrayCreate(length) {
+	if (!isInteger(length) || length < 0) {
+		throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0');
+	}
+	if (length > MAX_ARRAY_LENGTH) {
+		throw new $RangeError('length is greater than (2**32 - 1)');
+	}
+	var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
+	var A = []; // steps 3, 5
+	if (proto !== $ArrayPrototype) { // step 4
+		if (!$setProto) {
+			throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+		}
+		$setProto(A, proto);
+	}
+	if (length !== 0) { // bypasses the need for step 6
+		A.length = length;
+	}
+	/* step 6, the above as a shortcut for the below
+	OrdinaryDefineOwnProperty(A, 'length', {
+		'[[Configurable]]': false,
+		'[[Enumerable]]': false,
+		'[[Value]]': length,
+		'[[Writable]]': true
+	});
+	*/
+	return A;
+};
Index: frontend/node_modules/es-abstract/2022/ArraySetLength.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ArraySetLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ArraySetLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,77 @@
+'use strict';
+
+var $RangeError = require('es-errors/range');
+var $TypeError = require('es-errors/type');
+
+var assign = require('object.assign');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+var IsArray = require('./IsArray');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var ToUint32 = require('./ToUint32');
+
+// https://262.ecma-international.org/6.0/#sec-arraysetlength
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function ArraySetLength(A, Desc) {
+	if (!IsArray(A)) {
+		throw new $TypeError('Assertion failed: A must be an Array');
+	}
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+	}
+	if (!('[[Value]]' in Desc)) {
+		return OrdinaryDefineOwnProperty(A, 'length', Desc);
+	}
+	var newLenDesc = assign({}, Desc);
+	var newLen = ToUint32(Desc['[[Value]]']);
+	var numberLen = ToNumber(Desc['[[Value]]']);
+	if (newLen !== numberLen) {
+		throw new $RangeError('Invalid array length');
+	}
+	newLenDesc['[[Value]]'] = newLen;
+	var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
+	if (!IsDataDescriptor(oldLenDesc)) {
+		throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`');
+	}
+	var oldLen = oldLenDesc['[[Value]]'];
+	if (newLen >= oldLen) {
+		return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+	}
+	if (!oldLenDesc['[[Writable]]']) {
+		return false;
+	}
+	var newWritable;
+	if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
+		newWritable = true;
+	} else {
+		newWritable = false;
+		newLenDesc['[[Writable]]'] = true;
+	}
+	var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+	if (!succeeded) {
+		return false;
+	}
+	while (newLen < oldLen) {
+		oldLen -= 1;
+		// eslint-disable-next-line no-param-reassign
+		var deleteSucceeded = delete A[ToString(oldLen)];
+		if (!deleteSucceeded) {
+			newLenDesc['[[Value]]'] = oldLen + 1;
+			if (!newWritable) {
+				newLenDesc['[[Writable]]'] = false;
+				OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+				return false;
+			}
+		}
+	}
+	if (!newWritable) {
+		return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/2022/ArraySpeciesCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ArraySpeciesCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ArraySpeciesCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,48 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var isObject = require('es-object-atoms/isObject');
+
+var ArrayCreate = require('./ArrayCreate');
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+
+// https://262.ecma-international.org/12.0/#sec-arrayspeciescreate
+
+module.exports = function ArraySpeciesCreate(originalArray, length) {
+	if (!isInteger(length) || length < 0) {
+		throw new $TypeError('Assertion failed: length must be an integer >= 0');
+	}
+
+	var isArray = IsArray(originalArray);
+	if (!isArray) {
+		return ArrayCreate(length);
+	}
+
+	var C = Get(originalArray, 'constructor');
+	// TODO: figure out how to make a cross-realm normal Array, a same-realm Array
+	// if (IsConstructor(C)) {
+	// 	if C is another realm's Array, C = undefined
+	// 	Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
+	// }
+	if ($species && isObject(C)) {
+		C = Get(C, $species);
+		if (C === null) {
+			C = void 0;
+		}
+	}
+
+	if (typeof C === 'undefined') {
+		return ArrayCreate(length);
+	}
+	if (!IsConstructor(C)) {
+		throw new $TypeError('C must be a constructor');
+	}
+	return new C(length); // Construct(C, length);
+};
+
Index: frontend/node_modules/es-abstract/2022/AsyncFromSyncIteratorContinuation.js
===================================================================
--- frontend/node_modules/es-abstract/2022/AsyncFromSyncIteratorContinuation.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/AsyncFromSyncIteratorContinuation.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var $Promise = GetIntrinsic('%Promise%', true);
+
+var callBound = require('call-bound');
+
+var CreateIterResultObject = require('./CreateIterResultObject');
+var IteratorComplete = require('./IteratorComplete');
+var IteratorValue = require('./IteratorValue');
+var PromiseResolve = require('./PromiseResolve');
+
+var $then = callBound('Promise.prototype.then', true);
+
+// https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation
+
+module.exports = function AsyncFromSyncIteratorContinuation(result) {
+	if (!isObject(result)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (arguments.length > 1) {
+		throw new $SyntaxError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation');
+	}
+
+	if (!$Promise) {
+		throw new $SyntaxError('This environment does not support Promises.');
+	}
+
+	return new $Promise(function (resolve) {
+		var done = IteratorComplete(result); // step 2
+		var value = IteratorValue(result); // step 4
+		var valueWrapper = PromiseResolve($Promise, value); // step 6
+
+		// eslint-disable-next-line no-shadow
+		var onFulfilled = function (value) { // steps 8-9
+			return CreateIterResultObject(value, done); // step 8.a
+		};
+		resolve($then(valueWrapper, onFulfilled)); // step 11
+	}); // step 12
+};
Index: frontend/node_modules/es-abstract/2022/AsyncIteratorClose.js
===================================================================
--- frontend/node_modules/es-abstract/2022/AsyncIteratorClose.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/AsyncIteratorClose.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,70 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var $Promise = GetIntrinsic('%Promise%', true);
+
+var Call = require('./Call');
+var CompletionRecord = require('./CompletionRecord');
+var GetMethod = require('./GetMethod');
+
+var isIteratorRecord = require('../helpers/records/iterator-record-2023');
+
+var callBound = require('call-bound');
+
+var $then = callBound('Promise.prototype.then', true);
+
+// https://262.ecma-international.org/12.0/#sec-asynciteratorclose
+
+module.exports = function AsyncIteratorClose(iteratorRecord, completion) {
+	if (!isIteratorRecord(iteratorRecord)) {
+		throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1
+	}
+
+	if (!(completion instanceof CompletionRecord)) {
+		throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2
+	}
+
+	if (!$then) {
+		throw new $SyntaxError('This environment does not support Promises.');
+	}
+
+	var iterator = iteratorRecord['[[Iterator]]']; // step 3
+
+	return $then(
+		$then(
+			$then(
+				new $Promise(function (resolve) {
+					resolve(GetMethod(iterator, 'return')); // step 4
+					// resolve(Call(ret, iterator, [])); // step 6
+				}),
+				function (returnV) { // step 5.a
+					if (typeof returnV === 'undefined') {
+						return completion; // step 5.b
+					}
+					return Call(returnV, iterator); // step 5.c, 5.d.
+				}
+			),
+			null,
+			function (e) {
+				if (completion.type() === 'throw') {
+					completion['?'](); // step 6
+				} else {
+					throw e; // step 7
+				}
+			}
+		),
+		function (innerResult) { // step 8
+			if (completion.type() === 'throw') {
+				completion['?'](); // step 6
+			}
+			if (!isObject(innerResult)) {
+				throw new $TypeError('`innerResult` must be an Object'); // step 10
+			}
+			return completion;
+		}
+	);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/add.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/add.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/add.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add
+
+module.exports = function BigIntAdd(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	// shortcut for the actual spec mechanics
+	return x + y;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/bitwiseAND.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/bitwiseAND.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/bitwiseAND.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var BigIntBitwiseOp = require('../BigIntBitwiseOp');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND
+
+module.exports = function BigIntBitwiseAND(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+	return BigIntBitwiseOp('&', x, y);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/bitwiseNOT.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/bitwiseNOT.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/bitwiseNOT.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT
+
+module.exports = function BigIntBitwiseNOT(x) {
+	if (typeof x !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` argument must be a BigInt');
+	}
+	return -x - $BigInt(1);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/bitwiseOR.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/bitwiseOR.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/bitwiseOR.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var BigIntBitwiseOp = require('../BigIntBitwiseOp');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR
+
+module.exports = function BigIntBitwiseOR(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+	return BigIntBitwiseOp('|', x, y);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/bitwiseXOR.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/bitwiseXOR.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/bitwiseXOR.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var BigIntBitwiseOp = require('../BigIntBitwiseOp');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR
+
+module.exports = function BigIntBitwiseXOR(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+	return BigIntBitwiseOp('^', x, y);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/divide.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/divide.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/divide.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $RangeError = require('es-errors/range');
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide
+
+module.exports = function BigIntDivide(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+	if (y === $BigInt(0)) {
+		throw new $RangeError('Division by zero');
+	}
+	// shortcut for the actual spec mechanics
+	return x / y;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/equal.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/equal.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/equal.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal
+
+module.exports = function BigIntEqual(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+	// shortcut for the actual spec mechanics
+	return x === y;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/exponentiate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/exponentiate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/exponentiate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $RangeError = require('es-errors/range');
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate
+
+module.exports = function BigIntExponentiate(base, exponent) {
+	if (typeof base !== 'bigint' || typeof exponent !== 'bigint') {
+		throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts');
+	}
+	if (exponent < $BigInt(0)) {
+		throw new $RangeError('Exponent must be positive');
+	}
+	if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) {
+		return $BigInt(1);
+	}
+
+	var square = base;
+	var remaining = exponent;
+	while (remaining > $BigInt(0)) {
+		square += exponent;
+		--remaining; // eslint-disable-line no-plusplus
+	}
+	return square;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/index.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,43 @@
+'use strict';
+
+var add = require('./add');
+var bitwiseAND = require('./bitwiseAND');
+var bitwiseNOT = require('./bitwiseNOT');
+var bitwiseOR = require('./bitwiseOR');
+var bitwiseXOR = require('./bitwiseXOR');
+var divide = require('./divide');
+var equal = require('./equal');
+var exponentiate = require('./exponentiate');
+var leftShift = require('./leftShift');
+var lessThan = require('./lessThan');
+var multiply = require('./multiply');
+var remainder = require('./remainder');
+var sameValue = require('./sameValue');
+var sameValueZero = require('./sameValueZero');
+var signedRightShift = require('./signedRightShift');
+var subtract = require('./subtract');
+var toString = require('./toString');
+var unaryMinus = require('./unaryMinus');
+var unsignedRightShift = require('./unsignedRightShift');
+
+module.exports = {
+	add: add,
+	bitwiseAND: bitwiseAND,
+	bitwiseNOT: bitwiseNOT,
+	bitwiseOR: bitwiseOR,
+	bitwiseXOR: bitwiseXOR,
+	divide: divide,
+	equal: equal,
+	exponentiate: exponentiate,
+	leftShift: leftShift,
+	lessThan: lessThan,
+	multiply: multiply,
+	remainder: remainder,
+	sameValue: sameValue,
+	sameValueZero: sameValueZero,
+	signedRightShift: signedRightShift,
+	subtract: subtract,
+	toString: toString,
+	unaryMinus: unaryMinus,
+	unsignedRightShift: unsignedRightShift
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/leftShift.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/leftShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/leftShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift
+
+module.exports = function BigIntLeftShift(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	// shortcut for the actual spec mechanics
+	return x << y;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/lessThan.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/lessThan.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/lessThan.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan
+
+module.exports = function BigIntLessThan(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	// shortcut for the actual spec mechanics
+	return x < y;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/multiply.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/multiply.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/multiply.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply
+
+module.exports = function BigIntMultiply(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	// shortcut for the actual spec mechanics
+	return x * y;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/remainder.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/remainder.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/remainder.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $RangeError = require('es-errors/range');
+var $TypeError = require('es-errors/type');
+
+var zero = $BigInt && $BigInt(0);
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder
+
+module.exports = function BigIntRemainder(n, d) {
+	if (typeof n !== 'bigint' || typeof d !== 'bigint') {
+		throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts');
+	}
+
+	if (d === zero) {
+		throw new $RangeError('Division by zero');
+	}
+
+	if (n === zero) {
+		return zero;
+	}
+
+	// shortcut for the actual spec mechanics
+	return n % d;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/sameValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/sameValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/sameValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var BigIntEqual = require('./equal');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValue
+
+module.exports = function BigIntSameValue(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	return BigIntEqual(x, y);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/sameValueZero.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/sameValueZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/sameValueZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var BigIntEqual = require('./equal');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValueZero
+
+module.exports = function BigIntSameValueZero(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	return BigIntEqual(x, y);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/signedRightShift.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/signedRightShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/signedRightShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var BigIntLeftShift = require('./leftShift');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift
+
+module.exports = function BigIntSignedRightShift(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	return BigIntLeftShift(x, -y);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/subtract.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/subtract.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/subtract.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract
+
+module.exports = function BigIntSubtract(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	// shortcut for the actual spec mechanics
+	return x - y;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/toString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/toString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/toString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-tostring
+
+module.exports = function BigIntToString(x) {
+	if (typeof x !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` must be a BigInt');
+	}
+
+	return $String(x);
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/unaryMinus.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/unaryMinus.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/unaryMinus.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $TypeError = require('es-errors/type');
+
+var zero = $BigInt && $BigInt(0);
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus
+
+module.exports = function BigIntUnaryMinus(x) {
+	if (typeof x !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` argument must be a BigInt');
+	}
+
+	if (x === zero) {
+		return zero;
+	}
+
+	return -x;
+};
Index: frontend/node_modules/es-abstract/2022/BigInt/unsignedRightShift.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigInt/unsignedRightShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigInt/unsignedRightShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift
+
+module.exports = function BigIntUnsignedRightShift(x, y) {
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+	}
+
+	throw new $TypeError('BigInts have no unsigned right shift, use >> instead');
+};
Index: frontend/node_modules/es-abstract/2022/BigIntBitwiseOp.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BigIntBitwiseOp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BigIntBitwiseOp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,63 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+// var $BigInt = GetIntrinsic('%BigInt%', true);
+// var $pow = require('math-intrinsics/pow');
+
+// var BinaryAnd = require('./BinaryAnd');
+// var BinaryOr = require('./BinaryOr');
+// var BinaryXor = require('./BinaryXor');
+// var modulo = require('./modulo');
+
+// var zero = $BigInt && $BigInt(0);
+// var negOne = $BigInt && $BigInt(-1);
+// var two = $BigInt && $BigInt(2);
+
+// https://262.ecma-international.org/11.0/#sec-bigintbitwiseop
+
+module.exports = function BigIntBitwiseOp(op, x, y) {
+	if (op !== '&' && op !== '|' && op !== '^') {
+		throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`');
+	}
+	if (typeof x !== 'bigint' || typeof y !== 'bigint') {
+		throw new $TypeError('`x` and `y` must be BigInts');
+	}
+
+	if (op === '&') {
+		return x & y;
+	}
+	if (op === '|') {
+		return x | y;
+	}
+	return x ^ y;
+	/*
+	var result = zero;
+	var shift = 0;
+	while (x !== zero && x !== negOne && y !== zero && y !== negOne) {
+		var xDigit = modulo(x, two);
+		var yDigit = modulo(y, two);
+		if (op === '&') {
+			result += $pow(2, shift) * BinaryAnd(xDigit, yDigit);
+		} else if (op === '|') {
+			result += $pow(2, shift) * BinaryOr(xDigit, yDigit);
+		} else if (op === '^') {
+			result += $pow(2, shift) * BinaryXor(xDigit, yDigit);
+		}
+		shift += 1;
+		x = (x - xDigit) / two;
+		y = (y - yDigit) / two;
+	}
+	var tmp;
+	if (op === '&') {
+		tmp = BinaryAnd(modulo(x, two), modulo(y, two));
+	} else if (op === '|') {
+		tmp = BinaryAnd(modulo(x, two), modulo(y, two));
+	} else {
+		tmp = BinaryXor(modulo(x, two), modulo(y, two));
+	}
+	if (tmp !== 0) {
+		result -= $pow(2, shift);
+	}
+	return result;
+	*/
+};
Index: frontend/node_modules/es-abstract/2022/BinaryAnd.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BinaryAnd.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BinaryAnd.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-binaryand
+
+module.exports = function BinaryAnd(x, y) {
+	if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) {
+		throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1');
+	}
+	return x & y;
+};
Index: frontend/node_modules/es-abstract/2022/BinaryOr.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BinaryOr.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BinaryOr.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-binaryor
+
+module.exports = function BinaryOr(x, y) {
+	if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) {
+		throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1');
+	}
+	return x | y;
+};
Index: frontend/node_modules/es-abstract/2022/BinaryXor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/BinaryXor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/BinaryXor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-binaryxor
+
+module.exports = function BinaryXor(x, y) {
+	if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) {
+		throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1');
+	}
+	return x ^ y;
+};
Index: frontend/node_modules/es-abstract/2022/ByteListBitwiseOp.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ByteListBitwiseOp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ByteListBitwiseOp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,39 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsArray = require('./IsArray');
+
+var isByteValue = require('../helpers/isByteValue');
+
+// https://262.ecma-international.org/12.0/#sec-bytelistbitwiseop
+
+module.exports = function ByteListBitwiseOp(op, xBytes, yBytes) {
+	if (op !== '&' && op !== '^' && op !== '|') {
+		throw new $TypeError('Assertion failed: `op` must be `&`, `^`, or `|`');
+	}
+	if (!IsArray(xBytes) || !IsArray(yBytes) || xBytes.length !== yBytes.length) {
+		throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)');
+	}
+
+	var result = [];
+
+	for (var i = 0; i < xBytes.length; i += 1) {
+		var xByte = xBytes[i];
+		var yByte = yBytes[i];
+		if (!isByteValue(xByte) || !isByteValue(yByte)) {
+			throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)');
+		}
+		var resultByte;
+		if (op === '&') {
+			resultByte = xByte & yByte;
+		} else if (op === '^') {
+			resultByte = xByte ^ yByte;
+		} else {
+			resultByte = xByte | yByte;
+		}
+		result[result.length] = resultByte;
+	}
+
+	return result;
+};
Index: frontend/node_modules/es-abstract/2022/ByteListEqual.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ByteListEqual.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ByteListEqual.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,31 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsArray = require('./IsArray');
+
+var isByteValue = require('../helpers/isByteValue');
+
+// https://262.ecma-international.org/12.0/#sec-bytelistequal
+
+module.exports = function ByteListEqual(xBytes, yBytes) {
+	if (!IsArray(xBytes) || !IsArray(yBytes)) {
+		throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)');
+	}
+
+	if (xBytes.length !== yBytes.length) {
+		return false;
+	}
+
+	for (var i = 0; i < xBytes.length; i += 1) {
+		var xByte = xBytes[i];
+		var yByte = yBytes[i];
+		if (!isByteValue(xByte) || !isByteValue(yByte)) {
+			throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)');
+		}
+		if (xByte !== yByte) {
+			return false;
+		}
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/2022/Call.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Call.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Call.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+
+var IsArray = require('./IsArray');
+
+var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply');
+
+// https://262.ecma-international.org/6.0/#sec-call
+
+module.exports = function Call(F, V) {
+	var argumentsList = arguments.length > 2 ? arguments[2] : [];
+	if (!IsArray(argumentsList)) {
+		throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
+	}
+	return $apply(F, V, argumentsList);
+};
Index: frontend/node_modules/es-abstract/2022/CanonicalNumericIndexString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CanonicalNumericIndexString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CanonicalNumericIndexString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring
+
+module.exports = function CanonicalNumericIndexString(argument) {
+	if (typeof argument !== 'string') {
+		throw new $TypeError('Assertion failed: `argument` must be a String');
+	}
+	if (argument === '-0') { return -0; }
+	var n = ToNumber(argument);
+	if (SameValue(ToString(n), argument)) { return n; }
+	return void 0;
+};
Index: frontend/node_modules/es-abstract/2022/Canonicalize.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Canonicalize.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Canonicalize.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+var hasOwn = require('hasown');
+
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+var $toUpperCase = callBound('String.prototype.toUpperCase');
+
+var caseFolding = require('../helpers/caseFolding.json');
+
+// https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch
+
+module.exports = function Canonicalize(ch, IgnoreCase, Unicode) {
+	if (typeof ch !== 'string') {
+		throw new $TypeError('Assertion failed: `ch` must be a character');
+	}
+
+	if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') {
+		throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans');
+	}
+
+	if (!IgnoreCase) {
+		return ch; // step 1
+	}
+
+	if (Unicode) { // step 2
+		if (hasOwn(caseFolding.C, ch)) {
+			return caseFolding.C[ch];
+		}
+		if (hasOwn(caseFolding.S, ch)) {
+			return caseFolding.S[ch];
+		}
+		return ch; // step 2.b
+	}
+
+	var u = $toUpperCase(ch); // step 2
+
+	if (u.length !== 1) {
+		return ch; // step 3
+	}
+
+	var cu = u; // step 4
+
+	if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) {
+		return ch; // step 5
+	}
+
+	return cu;
+};
Index: frontend/node_modules/es-abstract/2022/CharacterRange.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CharacterRange.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CharacterRange.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = require('es-errors/type');
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+
+var CharSet = require('../helpers/CharSet').CharSet;
+
+module.exports = function CharacterRange(A, B) {
+	var a;
+	var b;
+
+	if (A instanceof CharSet || B instanceof CharSet) {
+		if (!(A instanceof CharSet) || !(B instanceof CharSet)) {
+			throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets');
+		}
+
+		A.yield(function (c) {
+			if (typeof a !== 'undefined') {
+				throw new $TypeError('Assertion failed: CharSet A has more than one character');
+			}
+			a = c;
+		});
+		B.yield(function (c) {
+			if (typeof b !== 'undefined') {
+				throw new $TypeError('Assertion failed: CharSet B has more than one character');
+			}
+			b = c;
+		});
+	} else {
+		if (A.length !== 1 || B.length !== 1) {
+			throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+		}
+		a = A[0];
+		b = B[0];
+	}
+
+	var i = $charCodeAt(a, 0);
+	var j = $charCodeAt(b, 0);
+
+	if (!(i <= j)) {
+		throw new $TypeError('Assertion failed: i is not <= j');
+	}
+
+	var arr = [];
+	for (var k = i; k <= j; k += 1) {
+		arr[arr.length] = $fromCharCode(k);
+	}
+	return arr;
+};
Index: frontend/node_modules/es-abstract/2022/ClearKeptObjects.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ClearKeptObjects.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ClearKeptObjects.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var SLOT = require('internal-slot');
+var keptObjects = [];
+
+// https://262.ecma-international.org/12.0/#sec-clear-kept-objects
+
+module.exports = function ClearKeptObjects() {
+	keptObjects.length = 0;
+};
+
+SLOT.set(module.exports, '[[es-abstract internal: KeptAlive]]', keptObjects);
Index: frontend/node_modules/es-abstract/2022/CloneArrayBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CloneArrayBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CloneArrayBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,46 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor');
+var IsConstructor = require('./IsConstructor');
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+var OrdinarySetPrototypeOf = require('./OrdinarySetPrototypeOf');
+
+var isInteger = require('math-intrinsics/isInteger');
+var isArrayBuffer = require('is-array-buffer');
+var arrayBufferSlice = require('arraybuffer.prototype.slice');
+
+// https://262.ecma-international.org/12.0/#sec-clonearraybuffer
+
+module.exports = function CloneArrayBuffer(srcBuffer, srcByteOffset, srcLength, cloneConstructor) {
+	if (!isArrayBuffer(srcBuffer)) {
+		throw new $TypeError('Assertion failed: `srcBuffer` must be an ArrayBuffer instance');
+	}
+	if (!isInteger(srcByteOffset) || srcByteOffset < 0) {
+		throw new $TypeError('Assertion failed: `srcByteOffset` must be a non-negative integer');
+	}
+	if (!isInteger(srcLength) || srcLength < 0) {
+		throw new $TypeError('Assertion failed: `srcLength` must be a non-negative integer');
+	}
+	if (!IsConstructor(cloneConstructor)) {
+		throw new $TypeError('Assertion failed: `cloneConstructor` must be a constructor');
+	}
+
+	// 3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength).
+	var proto = GetPrototypeFromConstructor(cloneConstructor, '%ArrayBufferPrototype%'); // step 3, kinda
+
+	if (IsDetachedBuffer(srcBuffer)) {
+		throw new $TypeError('`srcBuffer` must not be a detached ArrayBuffer'); // step 4
+	}
+
+	/*
+    5. Let srcBlock be srcBuffer.[[ArrayBufferData]].
+    6. Let targetBlock be targetBuffer.[[ArrayBufferData]].
+    7. Perform CopyDataBlockBytes(targetBlock, 0, srcBlock, srcByteOffset, srcLength).
+    */
+	var targetBuffer = arrayBufferSlice(srcBuffer, srcByteOffset, srcByteOffset + srcLength); // steps 5-7
+	OrdinarySetPrototypeOf(targetBuffer, proto); // step 3
+
+	return targetBuffer; // step 8
+};
Index: frontend/node_modules/es-abstract/2022/CodePointAt.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CodePointAt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CodePointAt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,55 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var callBound = require('call-bound');
+var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
+var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
+
+var UTF16SurrogatePairToCodePoint = require('./UTF16SurrogatePairToCodePoint');
+
+var $charAt = callBound('String.prototype.charAt');
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+
+// https://262.ecma-international.org/12.0/#sec-codepointat
+
+module.exports = function CodePointAt(string, position) {
+	if (typeof string !== 'string') {
+		throw new $TypeError('Assertion failed: `string` must be a String');
+	}
+	var size = string.length;
+	if (position < 0 || position >= size) {
+		throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');
+	}
+	var first = $charCodeAt(string, position);
+	var cp = $charAt(string, position);
+	var firstIsLeading = isLeadingSurrogate(first);
+	var firstIsTrailing = isTrailingSurrogate(first);
+	if (!firstIsLeading && !firstIsTrailing) {
+		return {
+			'[[CodePoint]]': cp,
+			'[[CodeUnitCount]]': 1,
+			'[[IsUnpairedSurrogate]]': false
+		};
+	}
+	if (firstIsTrailing || (position + 1 === size)) {
+		return {
+			'[[CodePoint]]': cp,
+			'[[CodeUnitCount]]': 1,
+			'[[IsUnpairedSurrogate]]': true
+		};
+	}
+	var second = $charCodeAt(string, position + 1);
+	if (!isTrailingSurrogate(second)) {
+		return {
+			'[[CodePoint]]': cp,
+			'[[CodeUnitCount]]': 1,
+			'[[IsUnpairedSurrogate]]': true
+		};
+	}
+
+	return {
+		'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),
+		'[[CodeUnitCount]]': 2,
+		'[[IsUnpairedSurrogate]]': false
+	};
+};
Index: frontend/node_modules/es-abstract/2022/CodePointsToString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CodePointsToString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CodePointsToString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint');
+var IsArray = require('./IsArray');
+
+var forEach = require('../helpers/forEach');
+var isCodePoint = require('../helpers/isCodePoint');
+
+// https://262.ecma-international.org/12.0/#sec-codepointstostring
+
+module.exports = function CodePointsToString(text) {
+	if (!IsArray(text)) {
+		throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points');
+	}
+	var result = '';
+	forEach(text, function (cp) {
+		if (!isCodePoint(cp)) {
+			throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points');
+		}
+		result += UTF16EncodeCodePoint(cp);
+	});
+	return result;
+};
Index: frontend/node_modules/es-abstract/2022/CompletePropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CompletePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CompletePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,43 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/6.0/#sec-completepropertydescriptor
+
+module.exports = function CompletePropertyDescriptor(Desc) {
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	/* eslint no-param-reassign: 0 */
+
+	if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+		if (!hasOwn(Desc, '[[Value]]')) {
+			Desc['[[Value]]'] = void 0;
+		}
+		if (!hasOwn(Desc, '[[Writable]]')) {
+			Desc['[[Writable]]'] = false;
+		}
+	} else {
+		if (!hasOwn(Desc, '[[Get]]')) {
+			Desc['[[Get]]'] = void 0;
+		}
+		if (!hasOwn(Desc, '[[Set]]')) {
+			Desc['[[Set]]'] = void 0;
+		}
+	}
+	if (!hasOwn(Desc, '[[Enumerable]]')) {
+		Desc['[[Enumerable]]'] = false;
+	}
+	if (!hasOwn(Desc, '[[Configurable]]')) {
+		Desc['[[Configurable]]'] = false;
+	}
+	return Desc;
+};
Index: frontend/node_modules/es-abstract/2022/CompletionRecord.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CompletionRecord.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CompletionRecord.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,48 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+
+var SLOT = require('internal-slot');
+
+// https://262.ecma-international.org/7.0/#sec-completion-record-specification-type
+
+var CompletionRecord = function CompletionRecord(type, value) {
+	if (!(this instanceof CompletionRecord)) {
+		return new CompletionRecord(type, value);
+	}
+	if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') {
+		throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"');
+	}
+	SLOT.set(this, '[[Type]]', type);
+	SLOT.set(this, '[[Value]]', value);
+	// [[Target]] slot?
+};
+
+CompletionRecord.prototype.type = function Type() {
+	return SLOT.get(this, '[[Type]]');
+};
+
+CompletionRecord.prototype.value = function Value() {
+	return SLOT.get(this, '[[Value]]');
+};
+
+CompletionRecord.prototype['?'] = function ReturnIfAbrupt() {
+	var type = SLOT.get(this, '[[Type]]');
+	var value = SLOT.get(this, '[[Value]]');
+
+	if (type === 'throw') {
+		throw value;
+	}
+	return value;
+};
+
+CompletionRecord.prototype['!'] = function assert() {
+	var type = SLOT.get(this, '[[Type]]');
+
+	if (type !== 'normal') {
+		throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"');
+	}
+	return SLOT.get(this, '[[Value]]');
+};
+
+module.exports = CompletionRecord;
Index: frontend/node_modules/es-abstract/2022/CopyDataProperties.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CopyDataProperties.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CopyDataProperties.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,69 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var callBound = require('call-bound');
+var OwnPropertyKeys = require('own-keys');
+
+var forEach = require('../helpers/forEach');
+var every = require('../helpers/every');
+var some = require('../helpers/some');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToObject = require('./ToObject');
+
+var isInteger = require('math-intrinsics/isInteger');
+
+// https://262.ecma-international.org/12.0/#sec-copydataproperties
+
+module.exports = function CopyDataProperties(target, source, excludedItems) {
+	if (!isObject(target)) {
+		throw new $TypeError('Assertion failed: "target" must be an Object');
+	}
+
+	if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) {
+		throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
+	}
+
+	if (typeof source === 'undefined' || source === null) {
+		return target;
+	}
+
+	var from = ToObject(source);
+
+	var keys = OwnPropertyKeys(from);
+	forEach(keys, function (nextKey) {
+		var excluded = some(excludedItems, function (e) {
+			return SameValue(e, nextKey) === true;
+		});
+		/*
+		var excluded = false;
+
+		forEach(excludedItems, function (e) {
+			if (SameValue(e, nextKey) === true) {
+				excluded = true;
+			}
+		});
+		*/
+
+		var enumerable = $isEnumerable(from, nextKey) || (
+		// this is to handle string keys being non-enumerable in older engines
+			typeof source === 'string'
+			&& nextKey >= 0
+			&& isInteger(ToNumber(nextKey))
+		);
+		if (excluded === false && enumerable) {
+			var propValue = Get(from, nextKey);
+			CreateDataPropertyOrThrow(target, nextKey, propValue);
+		}
+	});
+
+	return target;
+};
Index: frontend/node_modules/es-abstract/2022/CreateAsyncFromSyncIterator.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateAsyncFromSyncIterator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateAsyncFromSyncIterator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,137 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var $Promise = GetIntrinsic('%Promise%', true);
+
+var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation');
+var Call = require('./Call');
+var CreateIterResultObject = require('./CreateIterResultObject');
+var Get = require('./Get');
+var GetMethod = require('./GetMethod');
+var IteratorNext = require('./IteratorNext');
+var OrdinaryObjectCreate = require('./OrdinaryObjectCreate');
+
+var isIteratorRecord = require('../helpers/records/iterator-record-2023');
+
+var SLOT = require('internal-slot');
+
+var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || {
+	next: function next(value) {
+		if (!$Promise) {
+			throw new $SyntaxError('This environment does not support Promises.');
+		}
+
+		var O = this; // step 1
+
+		SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2
+
+		var argsLength = arguments.length;
+
+		return new $Promise(function (resolve) { // step 3
+			var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4
+			var result;
+			if (argsLength > 0) {
+				result = IteratorNext(syncIteratorRecord['[[Iterator]]'], value); // step 5.a
+			} else { // step 6
+				result = IteratorNext(syncIteratorRecord['[[Iterator]]']);// step 6.a
+			}
+			resolve(AsyncFromSyncIteratorContinuation(result)); // step 8
+		});
+	},
+	'return': function () {
+		if (!$Promise) {
+			throw new $SyntaxError('This environment does not support Promises.');
+		}
+
+		var O = this; // step 1
+
+		SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2
+
+		var valueIsPresent = arguments.length > 0;
+		var value = valueIsPresent ? arguments[0] : void undefined;
+
+		return new $Promise(function (resolve, reject) { // step 3
+			var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4
+			var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5
+
+			if (typeof iteratorReturn === 'undefined') { // step 7
+				var iterResult = CreateIterResultObject(value, true); // step 7.a
+				Call(resolve, void undefined, [iterResult]); // step 7.b
+				return;
+			}
+			var result;
+			if (valueIsPresent) { // step 8
+				result = Call(iteratorReturn, syncIterator, [value]); // step 8.a
+			} else { // step 9
+				result = Call(iteratorReturn, syncIterator); // step 9.a
+			}
+			if (!isObject(result)) { // step 11
+				Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a
+				return;
+			}
+
+			resolve(AsyncFromSyncIteratorContinuation(result)); // step 12
+		});
+	},
+	'throw': function () {
+		if (!$Promise) {
+			throw new $SyntaxError('This environment does not support Promises.');
+		}
+
+		var O = this; // step 1
+
+		SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2
+
+		var valueIsPresent = arguments.length > 0;
+		var value = valueIsPresent ? arguments[0] : void undefined;
+
+		return new $Promise(function (resolve, reject) { // step 3
+			var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4
+
+			var throwMethod = GetMethod(syncIterator, 'throw'); // step 5
+
+			if (typeof throwMethod === 'undefined') { // step 7
+				Call(reject, void undefined, [value]); // step 7.a
+				return;
+			}
+
+			var result;
+			if (valueIsPresent) { // step 8
+				result = Call(throwMethod, syncIterator, [value]); // step 8.a
+			} else { // step 9
+				result = Call(throwMethod, syncIterator); // step 9.a
+			}
+			if (!isObject(result)) { // step 11
+				Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a
+				return;
+			}
+
+			resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12
+		});
+	}
+};
+
+// https://262.ecma-international.org/11.0/#sec-createasyncfromsynciterator
+
+module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) {
+	if (!isIteratorRecord(syncIteratorRecord)) {
+		throw new $TypeError('Assertion failed: `syncIteratorRecord` must be an Iterator Record');
+	}
+
+	// var asyncIterator = OrdinaryObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1
+	var asyncIterator = OrdinaryObjectCreate($AsyncFromSyncIteratorPrototype);
+
+	SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2
+
+	var nextMethod = Get(asyncIterator, 'next'); // step 3
+
+	return { // steps 3-4
+		'[[Iterator]]': asyncIterator,
+		'[[NextMethod]]': nextMethod,
+		'[[Done]]': false
+	};
+};
Index: frontend/node_modules/es-abstract/2022/CreateDataProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateDataProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateDataProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+
+// https://262.ecma-international.org/6.0/#sec-createdataproperty
+
+module.exports = function CreateDataProperty(O, P, V) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+	var newDesc = {
+		'[[Configurable]]': true,
+		'[[Enumerable]]': true,
+		'[[Value]]': V,
+		'[[Writable]]': true
+	};
+	return OrdinaryDefineOwnProperty(O, P, newDesc);
+};
Index: frontend/node_modules/es-abstract/2022/CreateDataPropertyOrThrow.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateDataPropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateDataPropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var CreateDataProperty = require('./CreateDataProperty');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow
+
+module.exports = function CreateDataPropertyOrThrow(O, P, V) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+	var success = CreateDataProperty(O, P, V);
+	if (!success) {
+		throw new $TypeError('unable to create data property');
+	}
+	return success;
+};
Index: frontend/node_modules/es-abstract/2022/CreateHTML.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateHTML.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateHTML.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+
+var $replace = callBound('String.prototype.replace');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-createhtml
+
+module.exports = function CreateHTML(string, tag, attribute, value) {
+	if (typeof tag !== 'string' || typeof attribute !== 'string') {
+		throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings');
+	}
+	var str = RequireObjectCoercible(string);
+	var S = ToString(str);
+	var p1 = '<' + tag;
+	if (attribute !== '') {
+		var V = ToString(value);
+		var escapedV = $replace(V, /\x22/g, '&quot;');
+		p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
+	}
+	return p1 + '>' + S + '</' + tag + '>';
+};
Index: frontend/node_modules/es-abstract/2022/CreateIterResultObject.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateIterResultObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateIterResultObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/6.0/#sec-createiterresultobject
+
+module.exports = function CreateIterResultObject(value, done) {
+	if (typeof done !== 'boolean') {
+		throw new $TypeError('Assertion failed: Type(done) is not Boolean');
+	}
+	return {
+		value: value,
+		done: done
+	};
+};
Index: frontend/node_modules/es-abstract/2022/CreateListFromArrayLike.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateListFromArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateListFromArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,44 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var LengthOfArrayLike = require('./LengthOfArrayLike');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'BigInt', 'Object'];
+
+// https://262.ecma-international.org/11.0/#sec-createlistfromarraylike
+
+module.exports = function CreateListFromArrayLike(obj) {
+	var elementTypes = arguments.length > 1
+		? arguments[1]
+		: defaultElementTypes;
+
+	if (!isObject(obj)) {
+		throw new $TypeError('Assertion failed: `obj` must be an Object');
+	}
+	if (!IsArray(elementTypes)) {
+		throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array');
+	}
+	var len = LengthOfArrayLike(obj);
+	var list = [];
+	var index = 0;
+	while (index < len) {
+		var indexName = ToString(index);
+		var next = Get(obj, indexName);
+		var nextType = Type(next);
+		if ($indexOf(elementTypes, nextType) < 0) {
+			throw new $TypeError('item type ' + nextType + ' is not a valid elementType');
+		}
+		list[list.length] = next;
+		index += 1;
+	}
+	return list;
+};
Index: frontend/node_modules/es-abstract/2022/CreateMethodProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateMethodProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateMethodProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+
+// https://262.ecma-international.org/6.0/#sec-createmethodproperty
+
+module.exports = function CreateMethodProperty(O, P, V) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	var newDesc = {
+		'[[Configurable]]': true,
+		'[[Enumerable]]': false,
+		'[[Value]]': V,
+		'[[Writable]]': true
+	};
+	return DefineOwnProperty(
+		IsDataDescriptor,
+		SameValue,
+		FromPropertyDescriptor,
+		O,
+		P,
+		newDesc
+	);
+};
Index: frontend/node_modules/es-abstract/2022/CreateNonEnumerableDataPropertyOrThrow.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateNonEnumerableDataPropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateNonEnumerableDataPropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/13.0/#sec-createnonenumerabledatapropertyorthrow
+
+module.exports = function CreateNonEnumerableDataPropertyOrThrow(O, P, V) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	var newDesc = {
+		'[[Configurable]]': true,
+		'[[Enumerable]]': false,
+		'[[Value]]': V,
+		'[[Writable]]': true
+	};
+	return DefinePropertyOrThrow(O, P, newDesc);
+};
Index: frontend/node_modules/es-abstract/2022/CreateRegExpStringIterator.js
===================================================================
--- frontend/node_modules/es-abstract/2022/CreateRegExpStringIterator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/CreateRegExpStringIterator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,100 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);
+
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var CreateIterResultObject = require('./CreateIterResultObject');
+var CreateMethodProperty = require('./CreateMethodProperty');
+var Get = require('./Get');
+var OrdinaryObjectCreate = require('./OrdinaryObjectCreate');
+var RegExpExec = require('./RegExpExec');
+var Set = require('./Set');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+
+var SLOT = require('internal-slot');
+var setToStringTag = require('es-set-tostringtag');
+
+var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {
+	if (typeof S !== 'string') {
+		throw new $TypeError('`S` must be a string');
+	}
+	if (typeof global !== 'boolean') {
+		throw new $TypeError('`global` must be a boolean');
+	}
+	if (typeof fullUnicode !== 'boolean') {
+		throw new $TypeError('`fullUnicode` must be a boolean');
+	}
+	SLOT.set(this, '[[IteratingRegExp]]', R);
+	SLOT.set(this, '[[IteratedString]]', S);
+	SLOT.set(this, '[[Global]]', global);
+	SLOT.set(this, '[[Unicode]]', fullUnicode);
+	SLOT.set(this, '[[Done]]', false);
+};
+
+if (IteratorPrototype) {
+	RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);
+}
+
+var RegExpStringIteratorNext = function next() {
+	var O = this;
+	if (!isObject(O)) {
+		throw new $TypeError('receiver must be an object');
+	}
+	if (
+		!(O instanceof RegExpStringIterator)
+		|| !SLOT.has(O, '[[IteratingRegExp]]')
+		|| !SLOT.has(O, '[[IteratedString]]')
+		|| !SLOT.has(O, '[[Global]]')
+		|| !SLOT.has(O, '[[Unicode]]')
+		|| !SLOT.has(O, '[[Done]]')
+	) {
+		throw new $TypeError('"this" value must be a RegExpStringIterator instance');
+	}
+	if (SLOT.get(O, '[[Done]]')) {
+		return CreateIterResultObject(void undefined, true);
+	}
+	var R = SLOT.get(O, '[[IteratingRegExp]]');
+	var S = SLOT.get(O, '[[IteratedString]]');
+	var global = SLOT.get(O, '[[Global]]');
+	var fullUnicode = SLOT.get(O, '[[Unicode]]');
+	var match = RegExpExec(R, S);
+	if (match === null) {
+		SLOT.set(O, '[[Done]]', true);
+		return CreateIterResultObject(void undefined, true);
+	}
+	if (global) {
+		var matchStr = ToString(Get(match, '0'));
+		if (matchStr === '') {
+			var thisIndex = ToLength(Get(R, 'lastIndex'));
+			var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);
+			Set(R, 'lastIndex', nextIndex, true);
+		}
+		return CreateIterResultObject(match, false);
+	}
+	SLOT.set(O, '[[Done]]', true);
+	return CreateIterResultObject(match, false);
+};
+CreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);
+
+if (hasSymbols) {
+	setToStringTag(RegExpStringIterator.prototype, 'RegExp String Iterator');
+
+	if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {
+		var iteratorFn = function SymbolIterator() {
+			return this;
+		};
+		CreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);
+	}
+}
+
+// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator
+module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {
+	// assert R.global === global && R.unicode === fullUnicode?
+	return new RegExpStringIterator(R, S, global, fullUnicode);
+};
Index: frontend/node_modules/es-abstract/2022/DateFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DateFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DateFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,52 @@
+'use strict';
+
+var $EvalError = require('es-errors/eval');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+	var m = MonthFromTime(t);
+	var d = DayWithinYear(t);
+	if (m === 0) {
+		return d + 1;
+	}
+	if (m === 1) {
+		return d - 30;
+	}
+	var leap = InLeapYear(t);
+	if (m === 2) {
+		return d - 58 - leap;
+	}
+	if (m === 3) {
+		return d - 89 - leap;
+	}
+	if (m === 4) {
+		return d - 119 - leap;
+	}
+	if (m === 5) {
+		return d - 150 - leap;
+	}
+	if (m === 6) {
+		return d - 180 - leap;
+	}
+	if (m === 7) {
+		return d - 211 - leap;
+	}
+	if (m === 8) {
+		return d - 242 - leap;
+	}
+	if (m === 9) {
+		return d - 272 - leap;
+	}
+	if (m === 10) {
+		return d - 303 - leap;
+	}
+	if (m === 11) {
+		return d - 333 - leap;
+	}
+	throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
Index: frontend/node_modules/es-abstract/2022/DateString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DateString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DateString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+
+var $isNaN = require('math-intrinsics/isNaN');
+var padTimeComponent = require('../helpers/padTimeComponent');
+
+var DateFromTime = require('./DateFromTime');
+var MonthFromTime = require('./MonthFromTime');
+var WeekDay = require('./WeekDay');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/9.0/#sec-datestring
+
+module.exports = function DateString(tv) {
+	if (typeof tv !== 'number' || $isNaN(tv)) {
+		throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+	}
+	var weekday = weekdays[WeekDay(tv)];
+	var month = months[MonthFromTime(tv)];
+	var day = padTimeComponent(DateFromTime(tv));
+	var year = padTimeComponent(YearFromTime(tv), 4);
+	return weekday + '\x20' + month + '\x20' + day + '\x20' + year;
+};
Index: frontend/node_modules/es-abstract/2022/Day.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Day.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Day.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var floor = require('./floor');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+	return floor(t / msPerDay);
+};
Index: frontend/node_modules/es-abstract/2022/DayFromYear.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DayFromYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DayFromYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var floor = require('./floor');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+	return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400);
+};
+
Index: frontend/node_modules/es-abstract/2022/DayWithinYear.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DayWithinYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DayWithinYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+	return Day(t) - DayFromYear(YearFromTime(t));
+};
Index: frontend/node_modules/es-abstract/2022/DaysInYear.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DaysInYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DaysInYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+	if (modulo(y, 4) !== 0) {
+		return 365;
+	}
+	if (modulo(y, 100) !== 0) {
+		return 366;
+	}
+	if (modulo(y, 400) !== 0) {
+		return 365;
+	}
+	return 366;
+};
Index: frontend/node_modules/es-abstract/2022/DefineMethodProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DefineMethodProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DefineMethodProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,42 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/13.0/#sec-definemethodproperty
+
+module.exports = function DefineMethodProperty(homeObject, key, closure, enumerable) {
+	if (!isObject(homeObject)) {
+		throw new $TypeError('Assertion failed: `homeObject` is not an Object');
+	}
+	if (!isPropertyKey(key)) {
+		throw new $TypeError('Assertion failed: `key` is not a Property Key or a Private Name');
+	}
+	if (typeof closure !== 'function') {
+		throw new $TypeError('Assertion failed: `closure` is not a function');
+	}
+	if (typeof enumerable !== 'boolean') {
+		throw new $TypeError('Assertion failed: `enumerable` is not a Boolean');
+	}
+
+	// 1. Assert: homeObject is an ordinary, extensible object with no non-configurable properties.
+	if (!IsExtensible(homeObject)) {
+		throw new $TypeError('Assertion failed: `homeObject` is not an ordinary, extensible object, with no non-configurable properties');
+	}
+
+	// 2. If key is a Private Name, then
+	//  a. Return PrivateElement { [[Key]]: key, [[Kind]]: method, [[Value]]: closure }.
+	// 3. Else,
+	var desc = { // step 3.a
+		'[[Value]]': closure,
+		'[[Writable]]': true,
+		'[[Enumerable]]': enumerable,
+		'[[Configurable]]': true
+	};
+	DefinePropertyOrThrow(homeObject, key, desc); // step 3.b
+};
Index: frontend/node_modules/es-abstract/2022/DefinePropertyOrThrow.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DefinePropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DefinePropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,39 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-definepropertyorthrow
+
+module.exports = function DefinePropertyOrThrow(O, P, desc) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc);
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
+	}
+
+	return DefineOwnProperty(
+		IsDataDescriptor,
+		SameValue,
+		FromPropertyDescriptor,
+		O,
+		P,
+		Desc
+	);
+};
Index: frontend/node_modules/es-abstract/2022/DeletePropertyOrThrow.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DeletePropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DeletePropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow
+
+module.exports = function DeletePropertyOrThrow(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	// eslint-disable-next-line no-param-reassign
+	var success = delete O[P];
+	if (!success) {
+		throw new $TypeError('Attempt to delete property failed.');
+	}
+	return success;
+};
Index: frontend/node_modules/es-abstract/2022/DetachArrayBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2022/DetachArrayBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/DetachArrayBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,46 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+
+var isArrayBuffer = require('is-array-buffer');
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+var MessageChannel;
+try {
+	// eslint-disable-next-line global-require
+	MessageChannel = require('worker_threads').MessageChannel;
+} catch (e) { /**/ }
+
+// https://262.ecma-international.org/9.0/#sec-detacharraybuffer
+
+/* globals postMessage */
+
+module.exports = function DetachArrayBuffer(arrayBuffer) {
+	if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer');
+	}
+
+	// commented out since there's no way to set or access this key
+	// var key = arguments.length > 1 ? arguments[1] : void undefined;
+
+	// if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) {
+	// 	throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`');
+	// }
+
+	if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer
+		if (typeof structuredClone === 'function') {
+			structuredClone(arrayBuffer, { transfer: [arrayBuffer] });
+		} else if (typeof postMessage === 'function') {
+			postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners
+		} else if (MessageChannel) {
+			(new MessageChannel()).port1.postMessage(null, [arrayBuffer]);
+		} else {
+			throw new $SyntaxError('DetachArrayBuffer is not supported in this environment');
+		}
+	}
+
+	return null;
+};
Index: frontend/node_modules/es-abstract/2022/EnumerableOwnPropertyNames.js
===================================================================
--- frontend/node_modules/es-abstract/2022/EnumerableOwnPropertyNames.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/EnumerableOwnPropertyNames.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,37 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var objectKeys = require('object-keys');
+var safePushApply = require('safe-push-apply');
+var callBound = require('call-bound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var forEach = require('../helpers/forEach');
+
+// https://262.ecma-international.org/8.0/#sec-enumerableownproperties
+
+module.exports = function EnumerableOwnPropertyNames(O, kind) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	var keys = objectKeys(O);
+	if (kind === 'key') {
+		return keys;
+	}
+	if (kind === 'value' || kind === 'key+value') {
+		var results = [];
+		forEach(keys, function (key) {
+			if ($isEnumerable(O, key)) {
+				safePushApply(results, [
+					kind === 'value' ? O[key] : [key, O[key]]
+				]);
+			}
+		});
+		return results;
+	}
+	throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind);
+};
Index: frontend/node_modules/es-abstract/2022/FlattenIntoArray.js
===================================================================
--- frontend/node_modules/es-abstract/2022/FlattenIntoArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/FlattenIntoArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,55 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger');
+
+var Call = require('./Call');
+var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');
+var Get = require('./Get');
+var HasProperty = require('./HasProperty');
+var IsArray = require('./IsArray');
+var LengthOfArrayLike = require('./LengthOfArrayLike');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/11.0/#sec-flattenintoarray
+
+module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) {
+	var mapperFunction;
+	if (arguments.length > 5) {
+		mapperFunction = arguments[5];
+	}
+
+	var targetIndex = start;
+	var sourceIndex = 0;
+	while (sourceIndex < sourceLen) {
+		var P = ToString(sourceIndex);
+		var exists = HasProperty(source, P);
+		if (exists === true) {
+			var element = Get(source, P);
+			if (typeof mapperFunction !== 'undefined') {
+				if (arguments.length <= 6) {
+					throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided');
+				}
+				element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]);
+			}
+			var shouldFlatten = false;
+			if (depth > 0) {
+				shouldFlatten = IsArray(element);
+			}
+			if (shouldFlatten) {
+				var elementLen = LengthOfArrayLike(element);
+				targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1);
+			} else {
+				if (targetIndex >= MAX_SAFE_INTEGER) {
+					throw new $TypeError('index too large');
+				}
+				CreateDataPropertyOrThrow(target, ToString(targetIndex), element);
+				targetIndex += 1;
+			}
+		}
+		sourceIndex += 1;
+	}
+
+	return targetIndex;
+};
Index: frontend/node_modules/es-abstract/2022/FromPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/FromPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/FromPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-frompropertydescriptor
+
+module.exports = function FromPropertyDescriptor(Desc) {
+	if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	return fromPropertyDescriptor(Desc);
+};
Index: frontend/node_modules/es-abstract/2022/Get.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Get.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Get.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var inspect = require('object-inspect');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-get-o-p
+
+module.exports = function Get(O, P) {
+	// 7.3.1.1
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	// 7.3.1.2
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P));
+	}
+	// 7.3.1.3
+	return O[P];
+};
Index: frontend/node_modules/es-abstract/2022/GetGlobalObject.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetGlobalObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetGlobalObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var getGlobal = require('globalthis/polyfill');
+
+// https://262.ecma-international.org/6.0/#sec-getglobalobject
+
+module.exports = function GetGlobalObject() {
+	return getGlobal();
+};
Index: frontend/node_modules/es-abstract/2022/GetIterator.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetIterator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetIterator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,63 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $SyntaxError = require('es-errors/syntax');
+var isObject = require('es-object-atoms/isObject');
+var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true);
+
+var inspect = require('object-inspect');
+var hasSymbols = require('has-symbols')();
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+
+var ES = {
+	AdvanceStringIndex: AdvanceStringIndex,
+	GetMethod: GetMethod
+};
+
+// https://262.ecma-international.org/9.0/#sec-getiterator
+
+module.exports = function GetIterator(obj, hint, method) {
+	var actualHint = hint;
+	if (arguments.length < 2) {
+		actualHint = 'sync';
+	}
+	if (actualHint !== 'sync' && actualHint !== 'async') {
+		throw new $TypeError("Assertion failed: `hint` must be one of 'sync' or 'async', got " + inspect(hint));
+	}
+
+	var actualMethod = method;
+	if (arguments.length < 3) {
+		if (actualHint === 'async') {
+			if (hasSymbols && $asyncIterator) {
+				actualMethod = GetMethod(obj, $asyncIterator);
+			}
+			if (typeof actualMethod === 'undefined') {
+				throw new $SyntaxError("async from sync iterators aren't currently supported");
+			}
+		} else {
+			actualMethod = getIteratorMethod(ES, obj);
+		}
+	}
+	var iterator = Call(actualMethod, obj);
+	if (!isObject(iterator)) {
+		throw new $TypeError('iterator must return an object');
+	}
+
+	return iterator;
+
+	// TODO: This should return an IteratorRecord
+	/*
+	var nextMethod = GetV(iterator, 'next');
+	return {
+		'[[Iterator]]': iterator,
+		'[[NextMethod]]': nextMethod,
+		'[[Done]]': false
+	};
+	*/
+};
Index: frontend/node_modules/es-abstract/2022/GetMatchIndexPair.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetMatchIndexPair.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetMatchIndexPair.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var isMatchRecord = require('../helpers/records/match-record');
+
+// https://262.ecma-international.org/13.0/#sec-getmatchindexpair
+
+module.exports = function GetMatchIndexPair(S, match) {
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	if (!isMatchRecord(match)) {
+		throw new $TypeError('Assertion failed: `match` must be a Match Record');
+	}
+
+	if (!(match['[[StartIndex]]'] <= S.length)) {
+		throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S');
+	}
+	if (!(match['[[EndIndex]]'] <= S.length)) {
+		throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive');
+	}
+	return [match['[[StartIndex]]'], match['[[EndIndex]]']];
+};
Index: frontend/node_modules/es-abstract/2022/GetMatchString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetMatchString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetMatchString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var substring = require('./substring');
+
+var isMatchRecord = require('../helpers/records/match-record');
+
+// https://262.ecma-international.org/13.0/#sec-getmatchstring
+
+module.exports = function GetMatchString(S, match) {
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	if (!isMatchRecord(match)) {
+		throw new $TypeError('Assertion failed: `match` must be a Match Record');
+	}
+
+	if (!(match['[[StartIndex]]'] <= S.length)) {
+		throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S');
+	}
+	if (!(match['[[EndIndex]]'] <= S.length)) {
+		throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive');
+	}
+	return substring(S, match['[[StartIndex]]'], match['[[EndIndex]]']);
+};
Index: frontend/node_modules/es-abstract/2022/GetMethod.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetMethod.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetMethod.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,34 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var GetV = require('./GetV');
+var IsCallable = require('./IsCallable');
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+var inspect = require('object-inspect');
+
+// https://262.ecma-international.org/6.0/#sec-getmethod
+
+module.exports = function GetMethod(O, P) {
+	// 7.3.9.1
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	// 7.3.9.2
+	var func = GetV(O, P);
+
+	// 7.3.9.4
+	if (func == null) {
+		return void 0;
+	}
+
+	// 7.3.9.5
+	if (!IsCallable(func)) {
+		throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func));
+	}
+
+	// 7.3.9.6
+	return func;
+};
Index: frontend/node_modules/es-abstract/2022/GetOwnPropertyKeys.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetOwnPropertyKeys.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetOwnPropertyKeys.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true);
+var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true);
+var keys = require('object-keys');
+
+// https://262.ecma-international.org/6.0/#sec-getownpropertykeys
+
+module.exports = function GetOwnPropertyKeys(O, Type) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (Type === 'Symbol') {
+		return $gOPS ? $gOPS(O) : [];
+	}
+	if (Type === 'String') {
+		if (!$gOPN) {
+			return keys(O);
+		}
+		return $gOPN(O);
+	}
+	throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
+};
Index: frontend/node_modules/es-abstract/2022/GetPromiseResolve.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetPromiseResolve.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetPromiseResolve.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var IsConstructor = require('./IsConstructor');
+
+// https://262.ecma-international.org/12.0/#sec-getpromiseresolve
+
+module.exports = function GetPromiseResolve(promiseConstructor) {
+	if (!IsConstructor(promiseConstructor)) {
+		throw new $TypeError('Assertion failed: `promiseConstructor` must be a constructor');
+	}
+	var promiseResolve = Get(promiseConstructor, 'resolve');
+	if (IsCallable(promiseResolve) === false) {
+		throw new $TypeError('`resolve` method is not callable');
+	}
+	return promiseResolve;
+};
Index: frontend/node_modules/es-abstract/2022/GetPrototypeFromConstructor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetPrototypeFromConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetPrototypeFromConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $TypeError = require('es-errors/type');
+var $SyntaxError = require('es-errors/syntax');
+
+var Get = require('./Get');
+var IsConstructor = require('./IsConstructor');
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor
+
+module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
+	var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+	if (!isObject(intrinsic)) {
+		throw new $TypeError('intrinsicDefaultProto must be an object');
+	}
+	if (!IsConstructor(constructor)) {
+		throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+	}
+	var proto = Get(constructor, 'prototype');
+	if (!isObject(proto)) {
+		if (!(constructor instanceof $Function)) {
+			// ignore other realms, for now
+			throw new $SyntaxError('cross-realm constructors not currently supported');
+		}
+		proto = intrinsic;
+	}
+	return proto;
+};
Index: frontend/node_modules/es-abstract/2022/GetStringIndex.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetStringIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetStringIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+'use strict';
+
+var callBound = require('call-bound');
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+
+var StringToCodePoints = require('./StringToCodePoints');
+
+var $indexOf = callBound('String.prototype.indexOf');
+
+// https://262.ecma-international.org/13.0/#sec-getstringindex
+
+module.exports = function GetStringIndex(S, e) {
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	if (!isInteger(e) || e < 0) {
+		throw new $TypeError('Assertion failed: `e` must be a non-negative integer');
+	}
+
+	if (S === '') {
+		return 0;
+	}
+	var codepoints = StringToCodePoints(S);
+	var eUTF = e >= codepoints.length ? S.length : $indexOf(S, codepoints[e]);
+	return eUTF;
+};
Index: frontend/node_modules/es-abstract/2022/GetSubstitution.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetSubstitution.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetSubstitution.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,137 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var regexTester = require('safe-regex-test');
+var inspect = require('object-inspect');
+var isInteger = require('math-intrinsics/isInteger');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var min = require('./min');
+var StringIndexOf = require('./StringIndexOf');
+var StringToNumber = require('./StringToNumber');
+var substring = require('./substring');
+var ToString = require('./ToString');
+
+var every = require('../helpers/every');
+var isPrefixOf = require('../helpers/isPrefixOf');
+var isStringOrUndefined = require('../helpers/isStringOrUndefined');
+
+var startsWithDollarDigit = regexTester(/^\$[0-9]/);
+
+// http://www.ecma-international.org/ecma-262/13.0/#sec-getsubstitution
+
+// eslint-disable-next-line max-statements, max-params, max-lines-per-function
+module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacementTemplate) {
+	if (typeof matched !== 'string') {
+		throw new $TypeError('Assertion failed: `matched` must be a String');
+	}
+
+	if (typeof str !== 'string') {
+		throw new $TypeError('Assertion failed: `str` must be a String');
+	}
+
+	if (!isInteger(position) || position < 0) {
+		throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, got ' + inspect(position));
+	}
+
+	if (!IsArray(captures) || !every(captures, isStringOrUndefined)) {
+		throw new $TypeError('Assertion failed: `captures` must be a possibly-empty List of Strings or `undefined`, got ' + inspect(captures));
+	}
+
+	if (typeof namedCaptures !== 'undefined' && !isObject(namedCaptures)) {
+		throw new $TypeError('Assertion failed: `namedCaptures` must be `undefined` or an Object');
+	}
+
+	if (typeof replacementTemplate !== 'string') {
+		throw new $TypeError('Assertion failed: `replacementTemplate` must be a String');
+	}
+
+	var stringLength = str.length; // step 1
+
+	if (position > stringLength) {
+		throw new $TypeError('Assertion failed: position > stringLength, got ' + inspect(position)); // step 2
+	}
+
+	var templateRemainder = replacementTemplate; // step 3
+
+	var result = ''; // step 4
+
+	while (templateRemainder !== '') { // step 5
+		// 5.a NOTE: The following steps isolate ref (a prefix of templateRemainder), determine refReplacement (its replacement), and then append that replacement to result.
+
+		var ref, refReplacement, found, capture;
+		if (isPrefixOf('$$', templateRemainder)) { // step 5.b
+			ref = '$$'; // step 5.b.i
+			refReplacement = '$'; // step 5.b.ii
+		} else if (isPrefixOf('$`', templateRemainder)) { // step 5.c
+			ref = '$`'; // step 5.c.i
+			refReplacement = substring(str, 0, position); // step 5.c.ii
+		} else if (isPrefixOf('$&', templateRemainder)) { // step 5.d
+			ref = '$&'; // step 5.d.i
+			refReplacement = matched; // step 5.d.ii
+		} else if (isPrefixOf('$\'', templateRemainder)) { // step 5.e
+			ref = '$\''; // step 5.e.i
+			var matchLength = matched.length; // step 5.e.ii
+			var tailPos = position + matchLength; // step 5.e.iii
+			refReplacement = substring(str, min(tailPos, stringLength)); // step 5.e.iv
+			// 5.e.v NOTE: tailPos can exceed stringLength only if this abstract operation was invoked by a call to the intrinsic @@replace method of %RegExp.prototype% on an object whose "exec" property is not the intrinsic %RegExp.prototype.exec%.
+		} else if (startsWithDollarDigit(templateRemainder)) { // step 5.f
+			found = false; // step 5.f.i
+			for (var d = 2; d > 0; d -= 1) { // step 5.f.ii
+				// If found is false and templateRemainder starts with "$" followed by d or more decimal digits, then
+				if (!found) { // step 5.f.ii.1
+					found = true; // step 5.f.ii.1.a
+					ref = substring(templateRemainder, 0, 1 + d); // step 5.f.ii.1.b
+					var digits = substring(templateRemainder, 1, 1 + d); // step 5.f.ii.1.c
+					var index = StringToNumber(digits); // step 5.f.ii.1.d
+					if (index < 0 || index > 99) {
+						throw new $TypeError('Assertion failed: `index` must be >= 0 and <= 99'); // step 5.f.ii.1.e
+					}
+					if (index === 0) { // step 5.f.ii.1.f
+						refReplacement = ref;
+					} else if (index <= captures.length) { // step 5.f.ii.1.g
+						capture = captures[index - 1]; // step 5.f.ii.1.g.i
+						if (typeof capture === 'undefined') { // step 5.f.ii.1.g.ii
+							refReplacement = ''; // step 5.f.ii.1.g.ii.i
+						} else { // step 5.f.ii.1.g.iii
+							refReplacement = capture; // step 5.f.ii.1.g.iii.i
+						}
+					} else { // step 5.f.ii.1.h
+						refReplacement = ref; // step 5.f.ii.1.h.i
+					}
+				}
+			}
+		} else if (isPrefixOf('$<', templateRemainder)) { // step 5.g
+			var gtPos = StringIndexOf(templateRemainder, '>', 0); // step 5.g.i
+			if (gtPos === -1 || typeof namedCaptures === 'undefined') { // step 5.g.ii
+				ref = '$<'; // step 5.g.ii.1
+				refReplacement = ref; // step 5.g.ii.2
+			} else { // step 5.g.iii
+				ref = substring(templateRemainder, 0, gtPos + 1); // step 5.g.iii.1
+				var groupName = substring(templateRemainder, 2, gtPos); // step 5.g.iii.2
+				if (!isObject(namedCaptures)) {
+					throw new $TypeError('Assertion failed: Type(namedCaptures) is not Object'); // step 5.g.iii.3
+				}
+				capture = Get(namedCaptures, groupName); // step 5.g.iii.4
+				if (typeof capture === 'undefined') { // step 5.g.iii.5
+					refReplacement = ''; // step 5.g.iii.5.a
+				} else { // step 5.g.iii.6
+					refReplacement = ToString(capture); // step 5.g.iii.6.a
+				}
+			}
+		} else { // step 5.h
+			ref = substring(templateRemainder, 0, 1); // step 5.h.i
+			refReplacement = ref; // step 5.h.ii
+		}
+
+		var refLength = ref.length; // step 5.i
+
+		templateRemainder = substring(templateRemainder, refLength); // step 5.j
+
+		result += refReplacement; // step 5.k
+	}
+
+	return result; // step 6
+};
Index: frontend/node_modules/es-abstract/2022/GetV.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetV.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetV.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var inspect = require('object-inspect');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+// var ToObject = require('./ToObject');
+
+// https://262.ecma-international.org/6.0/#sec-getv
+
+module.exports = function GetV(V, P) {
+	// 7.3.2.1
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P));
+	}
+
+	// 7.3.2.2-3
+	// var O = ToObject(V);
+
+	// 7.3.2.4
+	return V[P];
+};
Index: frontend/node_modules/es-abstract/2022/GetValueFromBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2022/GetValueFromBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/GetValueFromBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,96 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var $Uint8Array = GetIntrinsic('%Uint8Array%', true);
+var isInteger = require('math-intrinsics/isInteger');
+
+var callBound = require('call-bound');
+
+var $slice = callBound('Array.prototype.slice');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+var RawBytesToNumeric = require('./RawBytesToNumeric');
+
+var isArrayBuffer = require('is-array-buffer');
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+var safeConcat = require('safe-array-concat');
+
+var tableTAO = require('./tables/typed-array-objects');
+
+var defaultEndianness = require('../helpers/defaultEndianness');
+
+// https://262.ecma-international.org/11.0/#sec-getvaluefrombuffer
+
+module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) {
+	var isSAB = isSharedArrayBuffer(arrayBuffer);
+	if (!isArrayBuffer(arrayBuffer) && !isSAB) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer');
+	}
+
+	if (!isInteger(byteIndex)) {
+		throw new $TypeError('Assertion failed: `byteIndex` must be an integer');
+	}
+
+	if (typeof type !== 'string' || typeof tableTAO.size['$' + type] !== 'number') {
+		throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices);
+	}
+
+	if (typeof isTypedArray !== 'boolean') {
+		throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean');
+	}
+
+	if (order !== 'SeqCst' && order !== 'Unordered') {
+		throw new $TypeError('Assertion failed: `order` must be either `SeqCst` or `Unordered`');
+	}
+
+	if (arguments.length > 5 && typeof arguments[5] !== 'boolean') {
+		throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present');
+	}
+
+	if (IsDetachedBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1
+	}
+
+	// 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type.
+
+	if (byteIndex < 0) {
+		throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3
+	}
+
+	// 4. Let block be arrayBuffer.[[ArrayBufferData]].
+
+	var elementSize = tableTAO.size['$' + type]; // step 5
+	if (!elementSize) {
+		throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices);
+	}
+
+	var rawValue;
+	if (isSAB) { // step 6
+		/*
+		a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record.
+		b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier().
+		c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false.
+		d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values.
+		e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency.
+		f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }.
+		g. Append readEvent to eventList.
+		h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]].
+		*/
+		throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation');
+	} else {
+		// 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex].
+		rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6
+	}
+
+	// 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation.
+	var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8
+
+	var bytes = isLittleEndian
+		? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize)
+		: $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize);
+
+	return RawBytesToNumeric(type, bytes, isLittleEndian);
+};
Index: frontend/node_modules/es-abstract/2022/HasOwnProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/HasOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/HasOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-hasownproperty
+
+module.exports = function HasOwnProperty(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: `O` must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: `P` must be a Property Key');
+	}
+	return hasOwn(O, P);
+};
Index: frontend/node_modules/es-abstract/2022/HasProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/HasProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/HasProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-hasproperty
+
+module.exports = function HasProperty(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: `O` must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: `P` must be a Property Key');
+	}
+	return P in O;
+};
Index: frontend/node_modules/es-abstract/2022/HourFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2022/HourFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/HourFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+	return modulo(floor(t / msPerHour), HoursPerDay);
+};
Index: frontend/node_modules/es-abstract/2022/InLeapYear.js
===================================================================
--- frontend/node_modules/es-abstract/2022/InLeapYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/InLeapYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var $EvalError = require('es-errors/eval');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+	var days = DaysInYear(YearFromTime(t));
+	if (days === 365) {
+		return 0;
+	}
+	if (days === 366) {
+		return 1;
+	}
+	throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
Index: frontend/node_modules/es-abstract/2022/InstallErrorCause.js
===================================================================
--- frontend/node_modules/es-abstract/2022/InstallErrorCause.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/InstallErrorCause.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var CreateNonEnumerableDataPropertyOrThrow = require('./CreateNonEnumerableDataPropertyOrThrow');
+var Get = require('./Get');
+var HasProperty = require('./HasProperty');
+
+// https://262.ecma-international.org/13.0/#sec-installerrorcause
+
+module.exports = function InstallErrorCause(O, options) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (isObject(options) && HasProperty(options, 'cause')) {
+		var cause = Get(options, 'cause');
+		CreateNonEnumerableDataPropertyOrThrow(O, 'cause', cause);
+	}
+};
Index: frontend/node_modules/es-abstract/2022/InstanceofOperator.js
===================================================================
--- frontend/node_modules/es-abstract/2022/InstanceofOperator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/InstanceofOperator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true);
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var OrdinaryHasInstance = require('./OrdinaryHasInstance');
+var ToBoolean = require('./ToBoolean');
+
+// https://262.ecma-international.org/6.0/#sec-instanceofoperator
+
+module.exports = function InstanceofOperator(O, C) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0;
+	if (typeof instOfHandler !== 'undefined') {
+		return ToBoolean(Call(instOfHandler, C, [O]));
+	}
+	if (!IsCallable(C)) {
+		throw new $TypeError('`C` is not Callable');
+	}
+	return OrdinaryHasInstance(C, O);
+};
Index: frontend/node_modules/es-abstract/2022/IntegerIndexedElementGet.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IntegerIndexedElementGet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IntegerIndexedElementGet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var GetValueFromBuffer = require('./GetValueFromBuffer');
+var IsValidIntegerIndex = require('./IsValidIntegerIndex');
+var TypedArrayElementSize = require('./TypedArrayElementSize');
+var TypedArrayElementType = require('./TypedArrayElementType');
+
+var isTypedArray = require('is-typed-array');
+var typedArrayBuffer = require('typed-array-buffer');
+var typedArrayByteOffset = require('typed-array-byte-offset');
+
+// https://262.ecma-international.org/13.0/#sec-integerindexedelementget
+
+module.exports = function IntegerIndexedElementGet(O, index) {
+	if (!isTypedArray(O)) {
+		throw new $TypeError('Assertion failed: `O` must be a TypedArray');
+	}
+
+	if (typeof index !== 'number') {
+		throw new $TypeError('Assertion failed: `index` must be a Number');
+	}
+
+	if (!IsValidIntegerIndex(O, index)) {
+		return void undefined; // step 1
+	}
+
+	var offset = typedArrayByteOffset(O); // step 2
+
+	var elementSize = TypedArrayElementSize(O); // step 3
+
+	var indexedPosition = (index * elementSize) + offset; // step 4
+
+	var elementType = TypedArrayElementType(O); // step 5
+
+	return GetValueFromBuffer(typedArrayBuffer(O), indexedPosition, elementType, true, 'Unordered'); // step 11
+};
Index: frontend/node_modules/es-abstract/2022/IntegerIndexedElementSet.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IntegerIndexedElementSet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IntegerIndexedElementSet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,42 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsValidIntegerIndex = require('./IsValidIntegerIndex');
+var SetValueInBuffer = require('./SetValueInBuffer');
+var ToBigInt = require('./ToBigInt');
+var ToNumber = require('./ToNumber');
+var TypedArrayElementSize = require('./TypedArrayElementSize');
+var TypedArrayElementType = require('./TypedArrayElementType');
+
+var typedArrayBuffer = require('typed-array-buffer');
+var typedArrayByteOffset = require('typed-array-byte-offset');
+var whichTypedArray = require('which-typed-array');
+
+// https://262.ecma-international.org/13.0/#sec-integerindexedelementset
+
+module.exports = function IntegerIndexedElementSet(O, index, value) {
+	var arrayTypeName = whichTypedArray(O);
+	if (!arrayTypeName) {
+		throw new $TypeError('Assertion failed: `O` must be a TypedArray');
+	}
+
+	if (typeof index !== 'number') {
+		throw new $TypeError('Assertion failed: `index` must be a Number');
+	}
+
+	var contentType = arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array' ? 'BigInt' : 'Number';
+	var numValue = contentType === 'BigInt' ? ToBigInt(value) : ToNumber(value); // steps 1 - 2
+
+	if (IsValidIntegerIndex(O, index)) { // step 3
+		var offset = typedArrayByteOffset(O); // step 3.a
+
+		var elementSize = TypedArrayElementSize(O); // step 3.b
+
+		var indexedPosition = (index * elementSize) + offset; // step 3.c
+
+		var elementType = TypedArrayElementType(O); // step 3.d
+
+		SetValueInBuffer(typedArrayBuffer(O), indexedPosition, elementType, numValue, true, 'Unordered'); // step 3.e
+	}
+};
Index: frontend/node_modules/es-abstract/2022/InternalizeJSONProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/InternalizeJSONProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/InternalizeJSONProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,66 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Call = require('./Call');
+var CreateDataProperty = require('./CreateDataProperty');
+var EnumerableOwnPropertyNames = require('./EnumerableOwnPropertyNames');
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var LengthOfArrayLike = require('./LengthOfArrayLike');
+var ToString = require('./ToString');
+
+var forEach = require('../helpers/forEach');
+
+// https://262.ecma-international.org/11.0/#sec-internalizejsonproperty
+
+module.exports = function InternalizeJSONProperty(holder, name, reviver) {
+	if (!isObject(holder)) {
+		throw new $TypeError('Assertion failed: `holder` is not an Object');
+	}
+	if (typeof name !== 'string') {
+		throw new $TypeError('Assertion failed: `name` is not a String');
+	}
+	if (typeof reviver !== 'function') {
+		throw new $TypeError('Assertion failed: `reviver` is not a Function');
+	}
+
+	var val = Get(holder, name); // step 1
+
+	if (isObject(val)) { // step 2
+		var isArray = IsArray(val); // step 2.a
+		if (isArray) { // step 2.b
+			var I = 0; // step 2.b.i
+
+			var len = LengthOfArrayLike(val, 'length'); // step 2.b.ii
+
+			while (I < len) { // step 2.b.iii
+				var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1
+
+				if (typeof newElement === 'undefined') { // step 2.b.iii.2
+					delete val[ToString(I)]; // step 2.b.iii.2.a
+				} else { // step 2.b.iii.3
+					CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a
+				}
+
+				I += 1; // step 2.b.iii.4
+			}
+		} else { // step 2.c
+			var keys = EnumerableOwnPropertyNames(val, 'key'); // step 2.c.i
+
+			forEach(keys, function (P) { // step 2.c.ii
+				// eslint-disable-next-line no-shadow
+				var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1
+
+				if (typeof newElement === 'undefined') { // step 2.c.ii.2
+					delete val[P]; // step 2.c.ii.2.a
+				} else { // step 2.c.ii.3
+					CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a
+				}
+			});
+		}
+	}
+
+	return Call(reviver, holder, [name, val]); // step 3
+};
Index: frontend/node_modules/es-abstract/2022/Invoke.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Invoke.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Invoke.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var Call = require('./Call');
+var IsArray = require('./IsArray');
+var GetV = require('./GetV');
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-invoke
+
+module.exports = function Invoke(O, P) {
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	var argumentsList = arguments.length > 2 ? arguments[2] : [];
+	if (!IsArray(argumentsList)) {
+		throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
+	}
+	var func = GetV(O, P);
+	return Call(func, O, argumentsList);
+};
Index: frontend/node_modules/es-abstract/2022/IsAccessorDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsAccessorDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsAccessorDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/5.1/#sec-8.10.1
+
+module.exports = function IsAccessorDescriptor(Desc) {
+	if (typeof Desc === 'undefined') {
+		return false;
+	}
+
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) {
+		return false;
+	}
+
+	return true;
+};
Index: frontend/node_modules/es-abstract/2022/IsArray.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#sec-isarray
+module.exports = require('../helpers/IsArray');
Index: frontend/node_modules/es-abstract/2022/IsBigIntElementType.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsBigIntElementType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsBigIntElementType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://262.ecma-international.org/11.0/#sec-isbigintelementtype
+
+module.exports = function IsBigIntElementType(type) {
+	return type === 'BigUint64' || type === 'BigInt64';
+};
Index: frontend/node_modules/es-abstract/2022/IsCallable.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsCallable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsCallable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://262.ecma-international.org/5.1/#sec-9.11
+
+module.exports = require('is-callable');
Index: frontend/node_modules/es-abstract/2022/IsCompatiblePropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsCompatiblePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsCompatiblePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/13.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+	return ValidateAndApplyPropertyDescriptor(
+		void undefined,
+		'',
+		Extensible,
+		Desc,
+		Current
+	);
+};
Index: frontend/node_modules/es-abstract/2022/IsConcatSpreadable.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsConcatSpreadable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsConcatSpreadable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToBoolean = require('./ToBoolean');
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-isconcatspreadable
+
+module.exports = function IsConcatSpreadable(O) {
+	if (!isObject(O)) {
+		return false;
+	}
+	if ($isConcatSpreadable) {
+		var spreadable = Get(O, $isConcatSpreadable);
+		if (typeof spreadable !== 'undefined') {
+			return ToBoolean(spreadable);
+		}
+	}
+	return IsArray(O);
+};
Index: frontend/node_modules/es-abstract/2022/IsConstructor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic.js');
+
+var $construct = GetIntrinsic('%Reflect.construct%', true);
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+try {
+	DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });
+} catch (e) {
+	// Accessor properties aren't supported
+	DefinePropertyOrThrow = null;
+}
+
+// https://262.ecma-international.org/6.0/#sec-isconstructor
+
+if (DefinePropertyOrThrow && $construct) {
+	var isConstructorMarker = {};
+	var badArrayLike = {};
+	DefinePropertyOrThrow(badArrayLike, 'length', {
+		'[[Get]]': function () {
+			throw isConstructorMarker;
+		},
+		'[[Enumerable]]': true
+	});
+
+	module.exports = function IsConstructor(argument) {
+		try {
+			// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:
+			$construct(argument, badArrayLike);
+		} catch (err) {
+			return err === isConstructorMarker;
+		}
+	};
+} else {
+	module.exports = function IsConstructor(argument) {
+		// unfortunately there's no way to truly check this without try/catch `new argument` in old environments
+		return typeof argument === 'function' && !!argument.prototype;
+	};
+}
Index: frontend/node_modules/es-abstract/2022/IsDataDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsDataDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsDataDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/5.1/#sec-8.10.2
+
+module.exports = function IsDataDescriptor(Desc) {
+	if (typeof Desc === 'undefined') {
+		return false;
+	}
+
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) {
+		return false;
+	}
+
+	return true;
+};
Index: frontend/node_modules/es-abstract/2022/IsDetachedBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsDetachedBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsDetachedBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var $byteLength = require('array-buffer-byte-length');
+var availableTypedArrays = require('available-typed-arrays')();
+var callBound = require('call-bound');
+var isArrayBuffer = require('is-array-buffer');
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true);
+
+// https://262.ecma-international.org/8.0/#sec-isdetachedbuffer
+
+module.exports = function IsDetachedBuffer(arrayBuffer) {
+	var isSAB = isSharedArrayBuffer(arrayBuffer);
+	if (!isArrayBuffer(arrayBuffer) && !isSAB) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot');
+	}
+	if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) {
+		try {
+			new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new
+		} catch (error) {
+			return !!error && error.name === 'TypeError';
+		}
+	}
+	return false;
+};
Index: frontend/node_modules/es-abstract/2022/IsExtensible.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsExtensible.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsExtensible.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true);
+var $isExtensible = GetIntrinsic('%Object.isExtensible%', true);
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+// https://262.ecma-international.org/6.0/#sec-isextensible-o
+
+module.exports = $preventExtensions
+	? function IsExtensible(obj) {
+		return !isPrimitive(obj) && $isExtensible(obj);
+	}
+	: function IsExtensible(obj) {
+		return !isPrimitive(obj);
+	};
Index: frontend/node_modules/es-abstract/2022/IsGenericDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsGenericDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsGenericDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/6.0/#sec-isgenericdescriptor
+
+module.exports = function IsGenericDescriptor(Desc) {
+	if (typeof Desc === 'undefined') {
+		return false;
+	}
+
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+		return true;
+	}
+
+	return false;
+};
Index: frontend/node_modules/es-abstract/2022/IsIntegralNumber.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsIntegralNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsIntegralNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var isInteger = require('math-intrinsics/isInteger');
+
+// https://262.ecma-international.org/12.0/#sec-isinteger
+
+module.exports = function IsIntegralNumber(argument) {
+	return isInteger(argument);
+};
Index: frontend/node_modules/es-abstract/2022/IsLessThan.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsLessThan.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsLessThan.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,87 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = require('es-errors/type');
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+var IsStringPrefix = require('./IsStringPrefix');
+var StringToBigInt = require('./StringToBigInt');
+var ToNumeric = require('./ToNumeric');
+var ToPrimitive = require('./ToPrimitive');
+
+var BigIntLessThan = require('./BigInt/lessThan');
+var NumberLessThan = require('./Number/lessThan');
+
+// https://262.ecma-international.org/13.0/#sec-islessthan
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function IsLessThan(x, y, LeftFirst) {
+	if (typeof LeftFirst !== 'boolean') {
+		throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+	}
+	var px;
+	var py;
+	if (LeftFirst) {
+		px = ToPrimitive(x, $Number);
+		py = ToPrimitive(y, $Number);
+	} else {
+		py = ToPrimitive(y, $Number);
+		px = ToPrimitive(x, $Number);
+	}
+
+	if (typeof px === 'string' && typeof py === 'string') {
+		if (IsStringPrefix(py, px)) {
+			return false;
+		}
+		if (IsStringPrefix(px, py)) {
+			return true;
+		}
+		/*
+		c. Let k be the smallest non-negative integer such that the code unit at index k within px is different from the code unit at index k within py. (There must be such a k, for neither String is a prefix of the other.)
+		d. Let m be the integer that is the numeric value of the code unit at index k within px.
+		e. Let n be the integer that is the numeric value of the code unit at index k within py.
+		f. If m < n, return true. Otherwise, return false.
+		*/
+		return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f
+	}
+
+	var nx;
+	var ny;
+	if (typeof px === 'bigint' && typeof py === 'string') {
+		ny = StringToBigInt(py);
+		if (typeof ny === 'undefined') {
+			return void undefined;
+		}
+		return BigIntLessThan(px, ny);
+	}
+	if (typeof px === 'string' && typeof py === 'bigint') {
+		nx = StringToBigInt(px);
+		if (typeof nx === 'undefined') {
+			return void undefined;
+		}
+		return BigIntLessThan(nx, py);
+	}
+
+	nx = ToNumeric(px);
+	ny = ToNumeric(py);
+
+	if (typeof nx === typeof ny) {
+		return typeof nx === 'number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny);
+	}
+
+	if ($isNaN(nx) || $isNaN(ny)) {
+		return void undefined;
+	}
+
+	if (nx === -Infinity || ny === Infinity) {
+		return true;
+	}
+	if (nx === Infinity || ny === -Infinity) {
+		return false;
+	}
+
+	return nx < ny; // by now, these are both finite, and the same type
+};
Index: frontend/node_modules/es-abstract/2022/IsLooselyEqual.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsLooselyEqual.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsLooselyEqual.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,58 @@
+'use strict';
+
+var isFinite = require('math-intrinsics/isFinite');
+var isObject = require('es-object-atoms/isObject');
+
+var IsStrictlyEqual = require('./IsStrictlyEqual');
+var StringToBigInt = require('./StringToBigInt');
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+
+var isSameType = require('../helpers/isSameType');
+
+// https://262.ecma-international.org/13.0/#sec-islooselyequal
+
+module.exports = function IsLooselyEqual(x, y) {
+	if (isSameType(x, y)) {
+		return IsStrictlyEqual(x, y);
+	}
+	if (x == null && y == null) {
+		return true;
+	}
+	if (typeof x === 'number' && typeof y === 'string') {
+		return IsLooselyEqual(x, ToNumber(y));
+	}
+	if (typeof x === 'string' && typeof y === 'number') {
+		return IsLooselyEqual(ToNumber(x), y);
+	}
+	if (typeof x === 'bigint' && typeof y === 'string') {
+		var n = StringToBigInt(y);
+		if (typeof n === 'undefined') {
+			return false;
+		}
+		return IsLooselyEqual(x, n);
+	}
+	if (typeof x === 'string' && typeof y === 'bigint') {
+		return IsLooselyEqual(y, x);
+	}
+	if (typeof x === 'boolean') {
+		return IsLooselyEqual(ToNumber(x), y);
+	}
+	if (typeof y === 'boolean') {
+		return IsLooselyEqual(x, ToNumber(y));
+	}
+	if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol' || typeof x === 'bigint') && isObject(y)) {
+		return IsLooselyEqual(x, ToPrimitive(y));
+	}
+	if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol' || typeof y === 'bigint')) {
+		return IsLooselyEqual(ToPrimitive(x), y);
+	}
+	if ((typeof x === 'bigint' && typeof y === 'number') || (typeof x === 'number' && typeof y === 'bigint')) {
+		if (!isFinite(x) || !isFinite(y)) {
+			return false;
+		}
+		// eslint-disable-next-line eqeqeq
+		return x == y; // shortcut for step 13.b.
+	}
+	return false;
+};
Index: frontend/node_modules/es-abstract/2022/IsNoTearConfiguration.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsNoTearConfiguration.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsNoTearConfiguration.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType');
+var IsBigIntElementType = require('./IsBigIntElementType');
+
+// https://262.ecma-international.org/11.0/#sec-isnotearconfiguration
+
+module.exports = function IsNoTearConfiguration(type, order) {
+	if (IsUnclampedIntegerElementType(type)) {
+		return true;
+	}
+	if (IsBigIntElementType(type) && order !== 'Init' && order !== 'Unordered') {
+		return true;
+	}
+	return false;
+};
Index: frontend/node_modules/es-abstract/2022/IsPromise.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsPromise.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsPromise.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $PromiseThen = callBound('Promise.prototype.then', true);
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-ispromise
+
+module.exports = function IsPromise(x) {
+	if (!isObject(x)) {
+		return false;
+	}
+	if (!$PromiseThen) { // Promises are not supported
+		return false;
+	}
+	try {
+		$PromiseThen(x); // throws if not a promise
+	} catch (e) {
+		return false;
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/2022/IsPropertyKey.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-ispropertykey
+
+module.exports = function IsPropertyKey(argument) {
+	return isPropertyKey(argument);
+};
Index: frontend/node_modules/es-abstract/2022/IsRegExp.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsRegExp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsRegExp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $match = GetIntrinsic('%Symbol.match%', true);
+
+var hasRegExpMatcher = require('is-regex');
+var isObject = require('es-object-atoms/isObject');
+
+var ToBoolean = require('./ToBoolean');
+
+// https://262.ecma-international.org/6.0/#sec-isregexp
+
+module.exports = function IsRegExp(argument) {
+	if (!isObject(argument)) {
+		return false;
+	}
+	if ($match) {
+		var isRegExp = argument[$match];
+		if (typeof isRegExp !== 'undefined') {
+			return ToBoolean(isRegExp);
+		}
+	}
+	return hasRegExpMatcher(argument);
+};
Index: frontend/node_modules/es-abstract/2022/IsSharedArrayBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsSharedArrayBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsSharedArrayBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+// https://262.ecma-international.org/8.0/#sec-issharedarraybuffer
+
+module.exports = function IsSharedArrayBuffer(obj) {
+	if (!isObject(obj)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	return isSharedArrayBuffer(obj);
+};
Index: frontend/node_modules/es-abstract/2022/IsStrictlyEqual.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsStrictlyEqual.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsStrictlyEqual.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var SameValueNonNumeric = require('./SameValueNonNumeric');
+var Type = require('./Type');
+var BigIntEqual = require('./BigInt/equal');
+var NumberEqual = require('./Number/equal');
+
+// https://262.ecma-international.org/13.0/#sec-isstrictlyequal
+
+module.exports = function IsStrictlyEqual(x, y) {
+	if (Type(x) !== Type(y)) {
+		return false;
+	}
+	if (typeof x === 'number' || typeof x === 'bigint') {
+		return typeof x === 'number' ? NumberEqual(x, y) : BigIntEqual(x, y);
+	}
+	return SameValueNonNumeric(x, y);
+};
Index: frontend/node_modules/es-abstract/2022/IsStringPrefix.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsStringPrefix.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsStringPrefix.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var StringIndexOf = require('./StringIndexOf');
+
+// https://262.ecma-international.org/13.0/#sec-isstringprefix
+
+module.exports = function IsStringPrefix(p, q) {
+	if (typeof p !== 'string') {
+		throw new $TypeError('Assertion failed: "p" must be a String');
+	}
+
+	if (typeof q !== 'string') {
+		throw new $TypeError('Assertion failed: "q" must be a String');
+	}
+
+	return StringIndexOf(q, p, 0) === 0;
+};
Index: frontend/node_modules/es-abstract/2022/IsStringWellFormedUnicode.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsStringWellFormedUnicode.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsStringWellFormedUnicode.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var CodePointAt = require('./CodePointAt');
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/13.0/#sec-isstringwellformedunicode
+
+module.exports = function IsStringWellFormedUnicode(string) {
+	if (typeof string !== 'string') {
+		throw new $TypeError('Assertion failed: `string` must be a String');
+	}
+	var strLen = string.length; // step 1
+	var k = 0; // step 2
+	while (k !== strLen) { // step 3
+		var cp = CodePointAt(string, k); // step 3.a
+		if (cp['[[IsUnpairedSurrogate]]']) {
+			return false; // step 3.b
+		}
+		k += cp['[[CodeUnitCount]]']; // step 3.c
+	}
+	return true; // step 4
+};
Index: frontend/node_modules/es-abstract/2022/IsUnclampedIntegerElementType.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsUnclampedIntegerElementType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsUnclampedIntegerElementType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+// https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype
+
+module.exports = function IsUnclampedIntegerElementType(type) {
+	return type === 'Int8'
+		|| type === 'Uint8'
+		|| type === 'Int16'
+		|| type === 'Uint16'
+		|| type === 'Int32'
+		|| type === 'Uint32';
+};
Index: frontend/node_modules/es-abstract/2022/IsUnsignedElementType.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsUnsignedElementType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsUnsignedElementType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+// https://262.ecma-international.org/11.0/#sec-isunsignedelementtype
+
+module.exports = function IsUnsignedElementType(type) {
+	return type === 'Uint8'
+		|| type === 'Uint8C'
+		|| type === 'Uint16'
+		|| type === 'Uint32'
+		|| type === 'BigUint64';
+};
Index: frontend/node_modules/es-abstract/2022/IsValidIntegerIndex.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsValidIntegerIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsValidIntegerIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isNegativeZero = require('math-intrinsics/isNegativeZero');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+
+var isInteger = require('math-intrinsics/isInteger');
+var typedArrayBuffer = require('typed-array-buffer');
+
+// https://262.ecma-international.org/12.0/#sec-isvalidintegerindex
+
+module.exports = function IsValidIntegerIndex(O, index) {
+	// Assert: O is an Integer-Indexed exotic object.
+	var buffer = typedArrayBuffer(O); // step 1
+
+	if (typeof index !== 'number') {
+		throw new $TypeError('Assertion failed: Type(index) is not Number');
+	}
+
+	if (IsDetachedBuffer(buffer)) { return false; } // step 2
+
+	if (!isInteger(index)) { return false; } // step 3
+
+	if (isNegativeZero(index)) { return false; } // step 4
+
+	if (index < 0 || index >= O.length) { return false; } // step 5
+
+	return true; // step 6
+};
Index: frontend/node_modules/es-abstract/2022/IsWordChar.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IsWordChar.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IsWordChar.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,46 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+
+var $indexOf = callBound('String.prototype.indexOf');
+
+var IsArray = require('./IsArray');
+var WordCharacters = require('./WordCharacters');
+
+var every = require('../helpers/every');
+
+var isInteger = require('math-intrinsics/isInteger');
+
+var isChar = function isChar(c) {
+	return typeof c === 'string';
+};
+
+// https://262.ecma-international.org/12.0/#sec-runtime-semantics-iswordchar-abstract-operation
+
+// note: prior to ES2023, this AO erroneously omitted the latter of its arguments.
+module.exports = function IsWordChar(e, InputLength, Input, IgnoreCase, Unicode) {
+	if (!isInteger(e)) {
+		throw new $TypeError('Assertion failed: `e` must be an integer');
+	}
+	if (!isInteger(InputLength)) {
+		throw new $TypeError('Assertion failed: `InputLength` must be an integer');
+	}
+	if (!IsArray(Input) || !every(Input, isChar)) {
+		throw new $TypeError('Assertion failed: `Input` must be a List of characters');
+	}
+	if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') {
+		throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans');
+	}
+
+	if (e === -1 || e === InputLength) {
+		return false; // step 1
+	}
+
+	var c = Input[e]; // step 2
+
+	var wordChars = WordCharacters(IgnoreCase, Unicode);
+
+	return $indexOf(wordChars, c) > -1; // steps 3-4
+};
Index: frontend/node_modules/es-abstract/2022/IterableToList.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IterableToList.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IterableToList.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIterator = require('./GetIterator');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+
+// https://262.ecma-international.org/12.0/#sec-iterabletolist
+
+module.exports = function IterableToList(items) {
+	var iterator;
+	if (arguments.length > 1) {
+		iterator = GetIterator(items, 'sync', arguments[1]);
+	} else {
+		iterator = GetIterator(items, 'sync');
+	}
+	var values = [];
+	var next = true;
+	while (next) {
+		next = IteratorStep(iterator);
+		if (next) {
+			var nextValue = IteratorValue(next);
+			values[values.length] = nextValue;
+		}
+	}
+	return values;
+};
Index: frontend/node_modules/es-abstract/2022/IteratorClose.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IteratorClose.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IteratorClose.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Call = require('./Call');
+var CompletionRecord = require('./CompletionRecord');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+
+// https://262.ecma-international.org/6.0/#sec-iteratorclose
+
+module.exports = function IteratorClose(iterator, completion) {
+	if (!isObject(iterator)) {
+		throw new $TypeError('Assertion failed: Type(iterator) is not Object');
+	}
+	if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) {
+		throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance');
+	}
+	var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion;
+
+	var iteratorReturn = GetMethod(iterator, 'return');
+
+	if (typeof iteratorReturn === 'undefined') {
+		return completionThunk();
+	}
+
+	var completionRecord;
+	try {
+		var innerResult = Call(iteratorReturn, iterator, []);
+	} catch (e) {
+		// if we hit here, then "e" is the innerResult completion that needs re-throwing
+
+		// if the completion is of type "throw", this will throw.
+		completionThunk();
+		// eslint-disable-next-line no-useless-assignment
+		completionThunk = null; // ensure it's not called twice.
+
+		// if not, then return the innerResult completion
+		throw e;
+	}
+	completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
+	// eslint-disable-next-line no-useless-assignment
+	completionThunk = null; // ensure it's not called twice.
+
+	if (!isObject(innerResult)) {
+		throw new $TypeError('iterator .return must return an object');
+	}
+
+	return completionRecord;
+};
Index: frontend/node_modules/es-abstract/2022/IteratorComplete.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IteratorComplete.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IteratorComplete.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Get = require('./Get');
+var ToBoolean = require('./ToBoolean');
+
+// https://262.ecma-international.org/6.0/#sec-iteratorcomplete
+
+module.exports = function IteratorComplete(iterResult) {
+	if (!isObject(iterResult)) {
+		throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+	}
+	return ToBoolean(Get(iterResult, 'done'));
+};
Index: frontend/node_modules/es-abstract/2022/IteratorNext.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IteratorNext.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IteratorNext.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Invoke = require('./Invoke');
+
+// https://262.ecma-international.org/6.0/#sec-iteratornext
+
+module.exports = function IteratorNext(iterator, value) {
+	var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
+	if (!isObject(result)) {
+		throw new $TypeError('iterator next must return an object');
+	}
+	return result;
+};
Index: frontend/node_modules/es-abstract/2022/IteratorStep.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IteratorStep.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IteratorStep.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var IteratorComplete = require('./IteratorComplete');
+var IteratorNext = require('./IteratorNext');
+
+// https://262.ecma-international.org/6.0/#sec-iteratorstep
+
+module.exports = function IteratorStep(iterator) {
+	var result = IteratorNext(iterator);
+	var done = IteratorComplete(result);
+	return done === true ? false : result;
+};
+
Index: frontend/node_modules/es-abstract/2022/IteratorValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/IteratorValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/IteratorValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Get = require('./Get');
+
+// https://262.ecma-international.org/6.0/#sec-iteratorvalue
+
+module.exports = function IteratorValue(iterResult) {
+	if (!isObject(iterResult)) {
+		throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+	}
+	return Get(iterResult, 'value');
+};
+
Index: frontend/node_modules/es-abstract/2022/LengthOfArrayLike.js
===================================================================
--- frontend/node_modules/es-abstract/2022/LengthOfArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/LengthOfArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Get = require('./Get');
+var ToLength = require('./ToLength');
+
+// https://262.ecma-international.org/11.0/#sec-lengthofarraylike
+
+module.exports = function LengthOfArrayLike(obj) {
+	if (!isObject(obj)) {
+		throw new $TypeError('Assertion failed: `obj` must be an Object');
+	}
+	return ToLength(Get(obj, 'length'));
+};
+
+// TODO: use this all over
Index: frontend/node_modules/es-abstract/2022/MakeDate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/MakeDate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/MakeDate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $isFinite = require('math-intrinsics/isFinite');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+	if (!$isFinite(day) || !$isFinite(time)) {
+		return NaN;
+	}
+	return (day * msPerDay) + time;
+};
Index: frontend/node_modules/es-abstract/2022/MakeDay.js
===================================================================
--- frontend/node_modules/es-abstract/2022/MakeDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/MakeDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var $isFinite = require('math-intrinsics/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var floor = require('./floor');
+var modulo = require('./modulo');
+var MonthFromTime = require('./MonthFromTime');
+var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+	if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+		return NaN;
+	}
+	var y = ToIntegerOrInfinity(year);
+	var m = ToIntegerOrInfinity(month);
+	var dt = ToIntegerOrInfinity(date);
+	var ym = y + floor(m / 12);
+	if (!$isFinite(ym)) {
+		return NaN;
+	}
+	var mn = modulo(m, 12);
+	var t = $DateUTC(ym, mn, 1);
+	if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+		return NaN;
+	}
+	return Day(t) + dt - 1;
+};
Index: frontend/node_modules/es-abstract/2022/MakeMatchIndicesIndexPairArray.js
===================================================================
--- frontend/node_modules/es-abstract/2022/MakeMatchIndicesIndexPairArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/MakeMatchIndicesIndexPairArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,66 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var ArrayCreate = require('./ArrayCreate');
+var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');
+var GetMatchIndexPair = require('./GetMatchIndexPair');
+var IsArray = require('./IsArray');
+var OrdinaryObjectCreate = require('./OrdinaryObjectCreate');
+var ToString = require('./ToString');
+
+var every = require('../helpers/every');
+var isMatchRecord = require('../helpers/records/match-record');
+
+var isStringOrUndefined = function isStringOrUndefined(s) {
+	return typeof s === 'undefined' || typeof s === 'string';
+};
+
+var isMatchRecordOrUndefined = function isMatchRecordOrUndefined(m) {
+	return typeof m === 'undefined' || isMatchRecord(m);
+};
+
+var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength');
+
+// https://262.ecma-international.org/13.0/#sec-getmatchindexpair
+
+module.exports = function MakeMatchIndicesIndexPairArray(S, indices, groupNames, hasGroups) {
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	if (!IsArray(indices) || !every(indices, isMatchRecordOrUndefined)) {
+		throw new $TypeError('Assertion failed: `indices` must be a List of either Match Records or `undefined`');
+	}
+	if (!IsArray(groupNames) || !every(groupNames, isStringOrUndefined)) {
+		throw new $TypeError('Assertion failed: `groupNames` must be a List of either Strings or `undefined`');
+	}
+	if (typeof hasGroups !== 'boolean') {
+		throw new $TypeError('Assertion failed: `hasGroups` must be a Boolean');
+	}
+
+	var n = indices.length; // step 1
+	if (!(n < MAX_ARRAY_LENGTH)) {
+		throw new $TypeError('Assertion failed: `indices` length must be less than the max array size, 2**32 - 1');
+	}
+	if (groupNames.length !== n - 1) {
+		throw new $TypeError('Assertion failed: `groupNames` must have exactly one fewer item than `indices`');
+	}
+
+	var A = ArrayCreate(n); // step 5
+	var groups = hasGroups ? OrdinaryObjectCreate(null) : void undefined; // step 6-7
+	CreateDataPropertyOrThrow(A, 'groups', groups); // step 8
+
+	for (var i = 0; i < n; i += 1) { // step 9
+		var matchIndices = indices[i]; // step 9.a
+		// eslint-disable-next-line no-negated-condition
+		var matchIndexPair = typeof matchIndices !== 'undefined' ? GetMatchIndexPair(S, matchIndices) : void undefined; // step 9.b-9.c
+		CreateDataPropertyOrThrow(A, ToString(i), matchIndexPair); // step 9.d
+		if (i > 0 && typeof groupNames[i - 1] !== 'undefined') { // step 9.e
+			if (!groups) {
+				throw new $TypeError('if `hasGroups` is `false`, `groupNames` can only contain `undefined` values');
+			}
+			CreateDataPropertyOrThrow(groups, groupNames[i - 1], matchIndexPair); // step 9.e.i
+		}
+	}
+	return A; // step 10
+};
Index: frontend/node_modules/es-abstract/2022/MakeTime.js
===================================================================
--- frontend/node_modules/es-abstract/2022/MakeTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/MakeTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('math-intrinsics/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
+
+// https://262.ecma-international.org/12.0/#sec-maketime
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+	if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+		return NaN;
+	}
+	var h = ToIntegerOrInfinity(hour);
+	var m = ToIntegerOrInfinity(min);
+	var s = ToIntegerOrInfinity(sec);
+	var milli = ToIntegerOrInfinity(ms);
+	var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+	return t;
+};
Index: frontend/node_modules/es-abstract/2022/MinFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2022/MinFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/MinFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+	return modulo(floor(t / msPerMinute), MinutesPerHour);
+};
Index: frontend/node_modules/es-abstract/2022/MonthFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2022/MonthFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/MonthFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+'use strict';
+
+var $RangeError = require('es-errors/range');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+	var day = DayWithinYear(t);
+	if (0 <= day && day < 31) {
+		return 0;
+	}
+	var leap = InLeapYear(t);
+	if (31 <= day && day < (59 + leap)) {
+		return 1;
+	}
+	if ((59 + leap) <= day && day < (90 + leap)) {
+		return 2;
+	}
+	if ((90 + leap) <= day && day < (120 + leap)) {
+		return 3;
+	}
+	if ((120 + leap) <= day && day < (151 + leap)) {
+		return 4;
+	}
+	if ((151 + leap) <= day && day < (181 + leap)) {
+		return 5;
+	}
+	if ((181 + leap) <= day && day < (212 + leap)) {
+		return 6;
+	}
+	if ((212 + leap) <= day && day < (243 + leap)) {
+		return 7;
+	}
+	if ((243 + leap) <= day && day < (273 + leap)) {
+		return 8;
+	}
+	if ((273 + leap) <= day && day < (304 + leap)) {
+		return 9;
+	}
+	if ((304 + leap) <= day && day < (334 + leap)) {
+		return 10;
+	}
+	if ((334 + leap) <= day && day < (365 + leap)) {
+		return 11;
+	}
+
+	throw new $RangeError('Assertion failed: `day` is out of range');
+};
Index: frontend/node_modules/es-abstract/2022/NewPromiseCapability.js
===================================================================
--- frontend/node_modules/es-abstract/2022/NewPromiseCapability.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/NewPromiseCapability.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,34 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsCallable = require('./IsCallable');
+var IsConstructor = require('./IsConstructor');
+
+// https://262.ecma-international.org/6.0/#sec-newpromisecapability
+
+module.exports = function NewPromiseCapability(C) {
+	if (!IsConstructor(C)) {
+		throw new $TypeError('C must be a constructor'); // step 1
+	}
+
+	var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3
+
+	var promise = new C(function (resolve, reject) { // steps 4-5
+		if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') {
+			throw new $TypeError('executor has already been called'); // step 4.a, 4.b
+		}
+		resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c
+		resolvingFunctions['[[Reject]]'] = reject; // step 4.d
+	}); // step 4-6
+
+	if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) {
+		throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8
+	}
+
+	return {
+		'[[Promise]]': promise,
+		'[[Resolve]]': resolvingFunctions['[[Resolve]]'],
+		'[[Reject]]': resolvingFunctions['[[Reject]]']
+	}; // step 9
+};
Index: frontend/node_modules/es-abstract/2022/NormalCompletion.js
===================================================================
--- frontend/node_modules/es-abstract/2022/NormalCompletion.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/NormalCompletion.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var CompletionRecord = require('./CompletionRecord');
+
+// https://262.ecma-international.org/6.0/#sec-normalcompletion
+
+module.exports = function NormalCompletion(value) {
+	return new CompletionRecord('normal', value);
+};
Index: frontend/node_modules/es-abstract/2022/Number/add.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/add.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/add.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,31 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isFinite = require('math-intrinsics/isFinite');
+var isNaN = require('math-intrinsics/isNaN');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-add
+
+module.exports = function NumberAdd(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+
+	if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) {
+		return NaN;
+	}
+
+	if (!isFinite(x)) {
+		return x;
+	}
+	if (!isFinite(y)) {
+		return y;
+	}
+
+	if (x === y && x === 0) { // both zeroes
+		return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0;
+	}
+
+	// shortcut for the actual spec mechanics
+	return x + y;
+};
Index: frontend/node_modules/es-abstract/2022/Number/bitwiseAND.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/bitwiseAND.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/bitwiseAND.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var NumberBitwiseOp = require('../NumberBitwiseOp');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND
+
+module.exports = function NumberBitwiseAND(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+	return NumberBitwiseOp('&', x, y);
+};
Index: frontend/node_modules/es-abstract/2022/Number/bitwiseNOT.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/bitwiseNOT.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/bitwiseNOT.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var ToInt32 = require('../ToInt32');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT
+
+module.exports = function NumberBitwiseNOT(x) {
+	if (typeof x !== 'number') {
+		throw new $TypeError('Assertion failed: `x` argument must be a Number');
+	}
+	var oldValue = ToInt32(x);
+	// Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer.
+	return ~oldValue;
+};
Index: frontend/node_modules/es-abstract/2022/Number/bitwiseOR.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/bitwiseOR.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/bitwiseOR.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var NumberBitwiseOp = require('../NumberBitwiseOp');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR
+
+module.exports = function NumberBitwiseOR(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+	return NumberBitwiseOp('|', x, y);
+};
Index: frontend/node_modules/es-abstract/2022/Number/bitwiseXOR.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/bitwiseXOR.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/bitwiseXOR.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var NumberBitwiseOp = require('../NumberBitwiseOp');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR
+
+module.exports = function NumberBitwiseXOR(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+	return NumberBitwiseOp('^', x, y);
+};
Index: frontend/node_modules/es-abstract/2022/Number/divide.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/divide.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/divide.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isFinite = require('math-intrinsics/isFinite');
+var isNaN = require('math-intrinsics/isNaN');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide
+
+module.exports = function NumberDivide(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+	if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) {
+		return NaN;
+	}
+	// shortcut for the actual spec mechanics
+	return x / y;
+};
Index: frontend/node_modules/es-abstract/2022/Number/equal.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/equal.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/equal.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var isNaN = require('../../helpers/isNaN');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal
+
+module.exports = function NumberEqual(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+	if (isNaN(x) || isNaN(y)) {
+		return false;
+	}
+	// shortcut for the actual spec mechanics
+	return x === y;
+};
Index: frontend/node_modules/es-abstract/2022/Number/exponentiate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/exponentiate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/exponentiate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,74 @@
+'use strict';
+
+// var isNegativeZero = require('math-intrinsics/isNegativeZero');
+var $pow = require('math-intrinsics/pow');
+
+var $TypeError = require('es-errors/type');
+
+/*
+var abs = require('math-intrinsics/abs');
+var isFinite = require('math-intrinsics/isFinite');
+var isNaN = require('math-intrinsics/isNaN');
+
+var IsInteger = require('math-intrinsics/isInteger');
+*/
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate
+
+/* eslint max-lines-per-function: 0, max-statements: 0 */
+
+module.exports = function NumberExponentiate(base, exponent) {
+	if (typeof base !== 'number' || typeof exponent !== 'number') {
+		throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers');
+	}
+	return $pow(base, exponent);
+	/*
+	if (isNaN(exponent)) {
+		return NaN;
+	}
+	if (exponent === 0) {
+		return 1;
+	}
+	if (isNaN(base)) {
+		return NaN;
+	}
+	var aB = abs(base);
+	if (aB > 1 && exponent === Infinity) {
+		return Infinity;
+	}
+	if (aB > 1 && exponent === -Infinity) {
+		return 0;
+	}
+	if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) {
+		return NaN;
+	}
+	if (aB < 1 && exponent === Infinity) {
+		return +0;
+	}
+	if (aB < 1 && exponent === -Infinity) {
+		return Infinity;
+	}
+	if (base === Infinity) {
+		return exponent > 0 ? Infinity : 0;
+	}
+	if (base === -Infinity) {
+		var isOdd = true;
+		if (exponent > 0) {
+			return isOdd ? -Infinity : Infinity;
+		}
+		return isOdd ? -0 : 0;
+	}
+	if (exponent > 0) {
+		return isNegativeZero(base) ? Infinity : 0;
+	}
+	if (isNegativeZero(base)) {
+		if (exponent > 0) {
+			return isOdd ? -0 : 0;
+		}
+		return isOdd ? -Infinity : Infinity;
+	}
+	if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) {
+		return NaN;
+	}
+	*/
+};
Index: frontend/node_modules/es-abstract/2022/Number/index.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,43 @@
+'use strict';
+
+var add = require('./add');
+var bitwiseAND = require('./bitwiseAND');
+var bitwiseNOT = require('./bitwiseNOT');
+var bitwiseOR = require('./bitwiseOR');
+var bitwiseXOR = require('./bitwiseXOR');
+var divide = require('./divide');
+var equal = require('./equal');
+var exponentiate = require('./exponentiate');
+var leftShift = require('./leftShift');
+var lessThan = require('./lessThan');
+var multiply = require('./multiply');
+var remainder = require('./remainder');
+var sameValue = require('./sameValue');
+var sameValueZero = require('./sameValueZero');
+var signedRightShift = require('./signedRightShift');
+var subtract = require('./subtract');
+var toString = require('./toString');
+var unaryMinus = require('./unaryMinus');
+var unsignedRightShift = require('./unsignedRightShift');
+
+module.exports = {
+	add: add,
+	bitwiseAND: bitwiseAND,
+	bitwiseNOT: bitwiseNOT,
+	bitwiseOR: bitwiseOR,
+	bitwiseXOR: bitwiseXOR,
+	divide: divide,
+	equal: equal,
+	exponentiate: exponentiate,
+	leftShift: leftShift,
+	lessThan: lessThan,
+	multiply: multiply,
+	remainder: remainder,
+	sameValue: sameValue,
+	sameValueZero: sameValueZero,
+	signedRightShift: signedRightShift,
+	subtract: subtract,
+	toString: toString,
+	unaryMinus: unaryMinus,
+	unsignedRightShift: unsignedRightShift
+};
Index: frontend/node_modules/es-abstract/2022/Number/leftShift.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/leftShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/leftShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var ToInt32 = require('../ToInt32');
+var ToUint32 = require('../ToUint32');
+var modulo = require('../modulo');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift
+
+module.exports = function NumberLeftShift(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+
+	var lnum = ToInt32(x);
+	var rnum = ToUint32(y);
+
+	var shiftCount = modulo(rnum, 32);
+
+	return lnum << shiftCount;
+};
Index: frontend/node_modules/es-abstract/2022/Number/lessThan.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/lessThan.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/lessThan.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var isNaN = require('../../helpers/isNaN');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan
+
+module.exports = function NumberLessThan(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+
+	// If x is NaN, return undefined.
+	// If y is NaN, return undefined.
+	if (isNaN(x) || isNaN(y)) {
+		return void undefined;
+	}
+
+	// shortcut for the actual spec mechanics
+	return x < y;
+};
Index: frontend/node_modules/es-abstract/2022/Number/multiply.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/multiply.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/multiply.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isFinite = require('math-intrinsics/isFinite');
+
+var isNaN = require('../../helpers/isNaN');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply
+
+module.exports = function NumberMultiply(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+
+	if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) {
+		return NaN;
+	}
+	if (!isFinite(x) && !isFinite(y)) {
+		return x === y ? Infinity : -Infinity;
+	}
+	if (!isFinite(x) && y !== 0) {
+		return x > 0 ? Infinity : -Infinity;
+	}
+	if (!isFinite(y) && x !== 0) {
+		return y > 0 ? Infinity : -Infinity;
+	}
+
+	// shortcut for the actual spec mechanics
+	return x * y;
+};
Index: frontend/node_modules/es-abstract/2022/Number/remainder.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/remainder.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/remainder.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isFinite = require('math-intrinsics/isFinite');
+
+var isNaN = require('../../helpers/isNaN');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-remainder
+
+module.exports = function NumberRemainder(n, d) {
+	if (typeof n !== 'number' || typeof d !== 'number') {
+		throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers');
+	}
+
+	// If either operand is NaN, the result is NaN.
+	// If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN.
+	if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) {
+		return NaN;
+	}
+
+	// If the dividend is finite and the divisor is an infinity, the result equals the dividend.
+	// If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend.
+	if (!isFinite(d) || n === 0) {
+		return n;
+	}
+
+	// In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved…
+	return n % d;
+};
Index: frontend/node_modules/es-abstract/2022/Number/sameValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/sameValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/sameValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var isNegativeZero = require('math-intrinsics/isNegativeZero');
+var $TypeError = require('es-errors/type');
+
+var NumberSameValueZero = require('./sameValueZero');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue
+
+module.exports = function NumberSameValue(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+	if (x === 0 && y === 0) {
+		return !(isNegativeZero(x) ^ isNegativeZero(y));
+	}
+	return NumberSameValueZero(x, y);
+};
Index: frontend/node_modules/es-abstract/2022/Number/sameValueZero.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/sameValueZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/sameValueZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var isNaN = require('../../helpers/isNaN');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero
+
+module.exports = function NumberSameValueZero(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+
+	var xNaN = isNaN(x);
+	var yNaN = isNaN(y);
+	if (xNaN || yNaN) {
+		return xNaN === yNaN;
+	}
+	return x === y;
+};
Index: frontend/node_modules/es-abstract/2022/Number/signedRightShift.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/signedRightShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/signedRightShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var ToInt32 = require('../ToInt32');
+var ToUint32 = require('../ToUint32');
+var modulo = require('../modulo');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift
+
+module.exports = function NumberSignedRightShift(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+
+	var lnum = ToInt32(x);
+	var rnum = ToUint32(y);
+
+	var shiftCount = modulo(rnum, 32);
+
+	return lnum >> shiftCount;
+};
Index: frontend/node_modules/es-abstract/2022/Number/subtract.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/subtract.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/subtract.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var NumberAdd = require('./add');
+var NumberUnaryMinus = require('./unaryMinus');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract
+
+module.exports = function NumberSubtract(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+	return NumberAdd(x, NumberUnaryMinus(y));
+};
Index: frontend/node_modules/es-abstract/2022/Number/toString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/toString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/toString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-tostring
+
+module.exports = function NumberToString(x) {
+	if (typeof x !== 'number') {
+		throw new $TypeError('Assertion failed: `x` must be a Number');
+	}
+
+	return $String(x);
+};
Index: frontend/node_modules/es-abstract/2022/Number/unaryMinus.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/unaryMinus.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/unaryMinus.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,17 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var isNaN = require('../../helpers/isNaN');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus
+
+module.exports = function NumberUnaryMinus(x) {
+	if (typeof x !== 'number') {
+		throw new $TypeError('Assertion failed: `x` argument must be a Number');
+	}
+	if (isNaN(x)) {
+		return NaN;
+	}
+	return -x;
+};
Index: frontend/node_modules/es-abstract/2022/Number/unsignedRightShift.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Number/unsignedRightShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Number/unsignedRightShift.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var ToInt32 = require('../ToInt32');
+var ToUint32 = require('../ToUint32');
+var modulo = require('../modulo');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift
+
+module.exports = function NumberUnsignedRightShift(x, y) {
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+
+	var lnum = ToInt32(x);
+	var rnum = ToUint32(y);
+
+	var shiftCount = modulo(rnum, 32);
+
+	return lnum >>> shiftCount;
+};
Index: frontend/node_modules/es-abstract/2022/NumberBitwiseOp.js
===================================================================
--- frontend/node_modules/es-abstract/2022/NumberBitwiseOp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/NumberBitwiseOp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var ToInt32 = require('./ToInt32');
+var ToUint32 = require('./ToUint32');
+
+// https://262.ecma-international.org/11.0/#sec-numberbitwiseop
+
+module.exports = function NumberBitwiseOp(op, x, y) {
+	if (op !== '&' && op !== '|' && op !== '^') {
+		throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`');
+	}
+	if (typeof x !== 'number' || typeof y !== 'number') {
+		throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+	}
+	var lnum = ToInt32(x);
+	var rnum = ToUint32(y);
+	if (op === '&') {
+		return lnum & rnum;
+	}
+	if (op === '|') {
+		return lnum | rnum;
+	}
+	return lnum ^ rnum;
+};
Index: frontend/node_modules/es-abstract/2022/NumberToBigInt.js
===================================================================
--- frontend/node_modules/es-abstract/2022/NumberToBigInt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/NumberToBigInt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $RangeError = require('es-errors/range');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var isInteger = require('math-intrinsics/isInteger');
+
+// https://262.ecma-international.org/12.0/#sec-numbertobigint
+
+module.exports = function NumberToBigInt(number) {
+	if (typeof number !== 'number') {
+		throw new $TypeError('Assertion failed: `number` must be a String');
+	}
+	if (!isInteger(number)) {
+		throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer');
+	}
+	if (!$BigInt) {
+		throw new $SyntaxError('BigInts are not supported in this environment');
+	}
+	return $BigInt(number);
+};
Index: frontend/node_modules/es-abstract/2022/NumericToRawBytes.js
===================================================================
--- frontend/node_modules/es-abstract/2022/NumericToRawBytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/NumericToRawBytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,62 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwnProperty = require('./HasOwnProperty');
+var ToBigInt64 = require('./ToBigInt64');
+var ToBigUint64 = require('./ToBigUint64');
+var ToInt16 = require('./ToInt16');
+var ToInt32 = require('./ToInt32');
+var ToInt8 = require('./ToInt8');
+var ToUint16 = require('./ToUint16');
+var ToUint32 = require('./ToUint32');
+var ToUint8 = require('./ToUint8');
+var ToUint8Clamp = require('./ToUint8Clamp');
+
+var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes');
+var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes');
+var integerToNBytes = require('../helpers/integerToNBytes');
+
+var tableTAO = require('./tables/typed-array-objects');
+
+// https://262.ecma-international.org/11.0/#table-the-typedarray-constructors
+var TypeToAO = {
+	__proto__: null,
+	$Int8: ToInt8,
+	$Uint8: ToUint8,
+	$Uint8C: ToUint8Clamp,
+	$Int16: ToInt16,
+	$Uint16: ToUint16,
+	$Int32: ToInt32,
+	$Uint32: ToUint32,
+	$BigInt64: ToBigInt64,
+	$BigUint64: ToBigUint64
+};
+
+// https://262.ecma-international.org/11.0/#sec-numerictorawbytes
+
+module.exports = function NumericToRawBytes(type, value, isLittleEndian) {
+	if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) {
+		throw new $TypeError('Assertion failed: `type` must be a TypedArray element type');
+	}
+	if (typeof value !== 'number' && typeof value !== 'bigint') {
+		throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt');
+	}
+	if (typeof isLittleEndian !== 'boolean') {
+		throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean');
+	}
+
+	if (type === 'Float32') { // step 1
+		return valueToFloat32Bytes(value, isLittleEndian);
+	} else if (type === 'Float64') { // step 2
+		return valueToFloat64Bytes(value, isLittleEndian);
+	} // step 3
+
+	var n = tableTAO.size['$' + type]; // step 3.a
+
+	var convOp = TypeToAO['$' + type]; // step 3.b
+
+	var intValue = convOp(value); // step 3.c
+
+	return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4
+};
Index: frontend/node_modules/es-abstract/2022/ObjectDefineProperties.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ObjectDefineProperties.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ObjectDefineProperties.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,37 @@
+'use strict';
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var Get = require('./Get');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToObject = require('./ToObject');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+var forEach = require('../helpers/forEach');
+var OwnPropertyKeys = require('own-keys');
+
+// https://262.ecma-international.org/6.0/#sec-objectdefineproperties
+
+/** @type {<T extends Record<PropertyKey, unknown> = {}>(O: T, Properties: object) => T} */
+module.exports = function ObjectDefineProperties(O, Properties) {
+	var props = ToObject(Properties); // step 1
+	var keys = OwnPropertyKeys(props); // step 2
+	/** @type {[string | symbol, import('../types').Descriptor][]} */
+	var descriptors = []; // step 3
+
+	forEach(keys, function (nextKey) { // step 4
+		var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a
+		if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b
+			var descObj = Get(props, nextKey); // step 4.b.i
+			var desc = ToPropertyDescriptor(descObj); // step 4.b.ii
+			descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii
+		}
+	});
+
+	forEach(descriptors, function (pair) { // step 5
+		var P = pair[0]; // step 5.a
+		var desc = pair[1]; // step 5.b
+		DefinePropertyOrThrow(O, P, desc); // step 5.c
+	});
+
+	return O; // step 6
+};
Index: frontend/node_modules/es-abstract/2022/OrdinaryCreateFromConstructor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinaryCreateFromConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinaryCreateFromConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var $TypeError = require('es-errors/type');
+
+var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor');
+var IsArray = require('./IsArray');
+var OrdinaryObjectCreate = require('./OrdinaryObjectCreate');
+
+// https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor
+
+module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) {
+	GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+	var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto);
+	var slots = arguments.length < 3 ? [] : arguments[2];
+	if (!IsArray(slots)) {
+		throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List');
+	}
+	return OrdinaryObjectCreate(proto, slots);
+};
Index: frontend/node_modules/es-abstract/2022/OrdinaryDefineOwnProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinaryDefineOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinaryDefineOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,54 @@
+'use strict';
+
+var $gOPD = require('gopd');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsExtensible = require('./IsExtensible');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var SameValue = require('./SameValue');
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty
+
+module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: O must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+	}
+	if (!$gOPD) {
+		// ES3/IE 8 fallback
+		if (IsAccessorDescriptor(Desc)) {
+			throw new $SyntaxError('This environment does not support accessor property descriptors.');
+		}
+		var creatingNormalDataProperty = !(P in O)
+			&& Desc['[[Writable]]']
+			&& Desc['[[Enumerable]]']
+			&& Desc['[[Configurable]]']
+			&& '[[Value]]' in Desc;
+		var settingExistingDataProperty = (P in O)
+			&& (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
+			&& (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
+			&& (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
+			&& '[[Value]]' in Desc;
+		if (creatingNormalDataProperty || settingExistingDataProperty) {
+			O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
+			return SameValue(O[P], Desc['[[Value]]']);
+		}
+		throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
+	}
+	var desc = $gOPD(O, P);
+	var current = desc && ToPropertyDescriptor(desc);
+	var extensible = IsExtensible(O);
+	return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
+};
Index: frontend/node_modules/es-abstract/2022/OrdinaryGetOwnProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinaryGetOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinaryGetOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,41 @@
+'use strict';
+
+var $gOPD = require('gopd');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var callBound = require('call-bound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var hasOwn = require('hasown');
+
+var IsArray = require('./IsArray');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var IsRegExp = require('./IsRegExp');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty
+
+module.exports = function OrdinaryGetOwnProperty(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: O must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	if (!hasOwn(O, P)) {
+		return void 0;
+	}
+	if (!$gOPD) {
+		// ES3 / IE 8 fallback
+		var arrayLength = IsArray(O) && P === 'length';
+		var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
+		return {
+			'[[Configurable]]': !(arrayLength || regexLastIndex),
+			'[[Enumerable]]': $isEnumerable(O, P),
+			'[[Value]]': O[P],
+			'[[Writable]]': true
+		};
+	}
+	return ToPropertyDescriptor($gOPD(O, P));
+};
Index: frontend/node_modules/es-abstract/2022/OrdinaryGetPrototypeOf.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinaryGetPrototypeOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinaryGetPrototypeOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var $getProto = require('get-proto');
+
+// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof
+
+module.exports = function OrdinaryGetPrototypeOf(O) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: O must be an Object');
+	}
+	if (!$getProto) {
+		throw new $TypeError('This environment does not support fetching prototypes.');
+	}
+	return $getProto(O);
+};
Index: frontend/node_modules/es-abstract/2022/OrdinaryHasInstance.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinaryHasInstance.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinaryHasInstance.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+
+// https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance
+
+module.exports = function OrdinaryHasInstance(C, O) {
+	if (!IsCallable(C)) {
+		return false;
+	}
+	if (!isObject(O)) {
+		return false;
+	}
+	var P = Get(C, 'prototype');
+	if (!isObject(P)) {
+		throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+	}
+	return O instanceof C;
+};
Index: frontend/node_modules/es-abstract/2022/OrdinaryHasProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinaryHasProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinaryHasProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty
+
+module.exports = function OrdinaryHasProperty(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	return P in O;
+};
Index: frontend/node_modules/es-abstract/2022/OrdinaryObjectCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinaryObjectCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinaryObjectCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,56 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $ObjectCreate = GetIntrinsic('%Object.create%', true);
+var $TypeError = require('es-errors/type');
+var $SyntaxError = require('es-errors/syntax');
+var isObject = require('es-object-atoms/isObject');
+
+var IsArray = require('./IsArray');
+
+var forEach = require('../helpers/forEach');
+
+var SLOT = require('internal-slot');
+
+var hasProto = require('has-proto')();
+
+// https://262.ecma-international.org/11.0/#sec-objectcreate
+
+module.exports = function OrdinaryObjectCreate(proto) {
+	if (proto !== null && !isObject(proto)) {
+		throw new $TypeError('Assertion failed: `proto` must be null or an object');
+	}
+	var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];
+	if (!IsArray(additionalInternalSlotsList)) {
+		throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');
+	}
+
+	// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; // step 1
+	// internalSlotsList.push(...additionalInternalSlotsList); // step 2
+	// var O = MakeBasicObject(internalSlotsList); // step 3
+	// setProto(O, proto); // step 4
+	// return O; // step 5
+
+	var O;
+	if (hasProto) {
+		O = { __proto__: proto };
+	} else if ($ObjectCreate) {
+		O = $ObjectCreate(proto);
+	} else {
+		if (proto === null) {
+			throw new $SyntaxError('native Object.create support is required to create null objects');
+		}
+		var T = function T() {};
+		T.prototype = proto;
+		O = new T();
+	}
+
+	if (additionalInternalSlotsList.length > 0) {
+		forEach(additionalInternalSlotsList, function (slot) {
+			SLOT.set(O, slot, void undefined);
+		});
+	}
+
+	return O;
+};
Index: frontend/node_modules/es-abstract/2022/OrdinarySetPrototypeOf.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinarySetPrototypeOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinarySetPrototypeOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,50 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var $setProto = require('set-proto');
+var isObject = require('es-object-atoms/isObject');
+
+var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
+
+// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof
+
+module.exports = function OrdinarySetPrototypeOf(O, V) {
+	if (V !== null && !isObject(V)) {
+		throw new $TypeError('Assertion failed: V must be Object or Null');
+	}
+	/*
+	var extensible = IsExtensible(O);
+	var current = OrdinaryGetPrototypeOf(O);
+	if (SameValue(V, current)) {
+		return true;
+	}
+	if (!extensible) {
+		return false;
+	}
+	*/
+	try {
+		$setProto(O, V);
+	} catch (e) {
+		return false;
+	}
+	return OrdinaryGetPrototypeOf(O) === V;
+	/*
+	var p = V;
+	var done = false;
+	while (!done) {
+		if (p === null) {
+			done = true;
+		} else if (SameValue(p, O)) {
+			return false;
+		} else {
+			if (wat) {
+				done = true;
+			} else {
+				p = p.[[Prototype]];
+			}
+		}
+	}
+	O.[[Prototype]] = V;
+	return true;
+	*/
+};
Index: frontend/node_modules/es-abstract/2022/OrdinaryToPrimitive.js
===================================================================
--- frontend/node_modules/es-abstract/2022/OrdinaryToPrimitive.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/OrdinaryToPrimitive.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+
+var inspect = require('object-inspect');
+
+// https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive
+
+module.exports = function OrdinaryToPrimitive(O, hint) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') {
+		throw new $TypeError('Assertion failed: `hint` must be "string" or "number"');
+	}
+
+	var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
+
+	for (var i = 0; i < methodNames.length; i += 1) {
+		var name = methodNames[i];
+		var method = Get(O, name);
+		if (IsCallable(method)) {
+			var result = Call(method, O);
+			if (!isObject(result)) {
+				return result;
+			}
+		}
+	}
+
+	throw new $TypeError('No primitive value for ' + inspect(O));
+};
Index: frontend/node_modules/es-abstract/2022/PromiseResolve.js
===================================================================
--- frontend/node_modules/es-abstract/2022/PromiseResolve.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/PromiseResolve.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBind = require('call-bind');
+var $SyntaxError = require('es-errors/syntax');
+
+var $resolve = GetIntrinsic('%Promise.resolve%', true);
+var $PromiseResolve = $resolve && callBind($resolve);
+
+// https://262.ecma-international.org/9.0/#sec-promise-resolve
+
+module.exports = function PromiseResolve(C, x) {
+	if (!$PromiseResolve) {
+		throw new $SyntaxError('This environment does not support Promises.');
+	}
+	return $PromiseResolve(C, x);
+};
+
Index: frontend/node_modules/es-abstract/2022/QuoteJSONString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/QuoteJSONString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/QuoteJSONString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,52 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+var forEach = require('../helpers/forEach');
+var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
+var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
+
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+var $strSplit = callBound('String.prototype.split');
+
+var StringToCodePoints = require('./StringToCodePoints');
+var UnicodeEscape = require('./UnicodeEscape');
+var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint');
+
+var hasOwn = require('hasown');
+
+// https://262.ecma-international.org/12.0/#sec-quotejsonstring
+
+var escapes = {
+	'\u0008': '\\b',
+	'\u0009': '\\t',
+	'\u000A': '\\n',
+	'\u000C': '\\f',
+	'\u000D': '\\r',
+	'\u0022': '\\"',
+	'\u005c': '\\\\'
+};
+
+module.exports = function QuoteJSONString(value) {
+	if (typeof value !== 'string') {
+		throw new $TypeError('Assertion failed: `value` must be a String');
+	}
+	var product = '"';
+	if (value) {
+		forEach($strSplit(StringToCodePoints(value), ''), function (C) {
+			if (hasOwn(escapes, C)) {
+				product += escapes[C];
+			} else {
+				var cCharCode = $charCodeAt(C, 0);
+				if (cCharCode < 0x20 || isLeadingSurrogate(cCharCode) || isTrailingSurrogate(cCharCode)) {
+					product += UnicodeEscape(C);
+				} else {
+					product += UTF16EncodeCodePoint(cCharCode);
+				}
+			}
+		});
+	}
+	product += '"';
+	return product;
+};
Index: frontend/node_modules/es-abstract/2022/RawBytesToNumeric.js
===================================================================
--- frontend/node_modules/es-abstract/2022/RawBytesToNumeric.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/RawBytesToNumeric.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,67 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bound');
+
+var $RangeError = require('es-errors/range');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var $BigInt = GetIntrinsic('%BigInt%', true);
+
+var hasOwnProperty = require('./HasOwnProperty');
+var IsArray = require('./IsArray');
+var IsBigIntElementType = require('./IsBigIntElementType');
+var IsUnsignedElementType = require('./IsUnsignedElementType');
+
+var bytesAsFloat32 = require('../helpers/bytesAsFloat32');
+var bytesAsFloat64 = require('../helpers/bytesAsFloat64');
+var bytesAsInteger = require('../helpers/bytesAsInteger');
+var every = require('../helpers/every');
+var isByteValue = require('../helpers/isByteValue');
+
+var $reverse = callBound('Array.prototype.reverse');
+var $slice = callBound('Array.prototype.slice');
+
+var tableTAO = require('./tables/typed-array-objects');
+
+// https://262.ecma-international.org/11.0/#sec-rawbytestonumeric
+
+module.exports = function RawBytesToNumeric(type, rawBytes, isLittleEndian) {
+	if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) {
+		throw new $TypeError('Assertion failed: `type` must be a TypedArray element type');
+	}
+	if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) {
+		throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes');
+	}
+	if (typeof isLittleEndian !== 'boolean') {
+		throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean');
+	}
+
+	var elementSize = tableTAO.size['$' + type]; // step 1
+
+	if (rawBytes.length !== elementSize) {
+		// this assertion is not in the spec, but it'd be an editorial error if it were ever violated
+		throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type);
+	}
+
+	var isBigInt = IsBigIntElementType(type);
+	if (isBigInt && !$BigInt) {
+		throw new $SyntaxError('this environment does not support BigInts');
+	}
+
+	// eslint-disable-next-line no-param-reassign
+	rawBytes = $slice(rawBytes, 0, elementSize);
+	if (!isLittleEndian) {
+		$reverse(rawBytes); // step 2
+	}
+
+	if (type === 'Float32') { // step 3
+		return bytesAsFloat32(rawBytes);
+	}
+
+	if (type === 'Float64') { // step 4
+		return bytesAsFloat64(rawBytes);
+	}
+
+	return bytesAsInteger(rawBytes, elementSize, IsUnsignedElementType(type), isBigInt);
+};
Index: frontend/node_modules/es-abstract/2022/RegExpCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/RegExpCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/RegExpCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $RegExp = GetIntrinsic('%RegExp%');
+
+// var RegExpAlloc = require('./RegExpAlloc');
+// var RegExpInitialize = require('./RegExpInitialize');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-regexpcreate
+
+module.exports = function RegExpCreate(P, F) {
+	// var obj = RegExpAlloc($RegExp);
+	// return RegExpInitialize(obj, P, F);
+
+	// covers spec mechanics; bypass regex brand checking
+	var pattern = typeof P === 'undefined' ? '' : ToString(P);
+	var flags = typeof F === 'undefined' ? '' : ToString(F);
+	return new $RegExp(pattern, flags);
+};
Index: frontend/node_modules/es-abstract/2022/RegExpExec.js
===================================================================
--- frontend/node_modules/es-abstract/2022/RegExpExec.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/RegExpExec.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var regexExec = require('call-bound')('RegExp.prototype.exec');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+
+// https://262.ecma-international.org/6.0/#sec-regexpexec
+
+module.exports = function RegExpExec(R, S) {
+	if (!isObject(R)) {
+		throw new $TypeError('Assertion failed: `R` must be an Object');
+	}
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	var exec = Get(R, 'exec');
+	if (IsCallable(exec)) {
+		var result = Call(exec, R, [S]);
+		if (result === null || isObject(result)) {
+			return result;
+		}
+		throw new $TypeError('"exec" method must return `null` or an Object');
+	}
+	return regexExec(R, S);
+};
Index: frontend/node_modules/es-abstract/2022/RegExpHasFlag.js
===================================================================
--- frontend/node_modules/es-abstract/2022/RegExpHasFlag.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/RegExpHasFlag.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var $RegExpPrototype = GetIntrinsic('%RegExp.prototype%');
+
+var SameValue = require('./SameValue');
+
+var $indexOf = callBound('String.prototype.indexOf');
+
+var hasRegExpMatcher = require('is-regex');
+var getFlags = require('regexp.prototype.flags');
+
+// https://262.ecma-international.org/13.0/#sec-regexphasflag
+
+module.exports = function RegExpHasFlag(R, codeUnit) {
+	if (typeof codeUnit !== 'string' || codeUnit.length !== 1) {
+		throw new $TypeError('Assertion failed: `string` must be a code unit - a String of length 1');
+	}
+
+	if (!isObject(R)) {
+		throw new $TypeError('Assertion failed: Type(R) is not Object');
+	}
+
+	if (!hasRegExpMatcher(R)) { // step 2
+		if (SameValue(R, $RegExpPrototype)) {
+			return void undefined; // step 2.a
+		}
+		throw new $TypeError('`R` must be a RegExp object'); // step 2.b
+	}
+
+	var flags = getFlags(R); // step 3
+
+	return $indexOf(flags, codeUnit) > -1; // steps 4-5
+};
Index: frontend/node_modules/es-abstract/2022/RequireObjectCoercible.js
===================================================================
--- frontend/node_modules/es-abstract/2022/RequireObjectCoercible.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/RequireObjectCoercible.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('es-object-atoms/RequireObjectCoercible');
Index: frontend/node_modules/es-abstract/2022/SameValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SameValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SameValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+// http://262.ecma-international.org/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+	if (x === y) { // 0 === -0, but they are not identical.
+		if (x === 0) { return 1 / x === 1 / y; }
+		return true;
+	}
+	return $isNaN(x) && $isNaN(y);
+};
Index: frontend/node_modules/es-abstract/2022/SameValueNonNumeric.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SameValueNonNumeric.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SameValueNonNumeric.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/11.0/#sec-samevaluenonnumeric
+
+module.exports = function SameValueNonNumeric(x, y) {
+	if (typeof x === 'number' || typeof x === 'bigint') {
+		throw new $TypeError('Assertion failed: SameValueNonNumeric does not accept Number or BigInt values');
+	}
+	if (Type(x) !== Type(y)) {
+		throw new $TypeError('SameValueNonNumeric requires two non-numeric values of the same type.');
+	}
+	return SameValue(x, y);
+};
Index: frontend/node_modules/es-abstract/2022/SameValueZero.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SameValueZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SameValueZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+// https://262.ecma-international.org/6.0/#sec-samevaluezero
+
+module.exports = function SameValueZero(x, y) {
+	return (x === y) || ($isNaN(x) && $isNaN(y));
+};
Index: frontend/node_modules/es-abstract/2022/SecFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SecFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SecFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+	return modulo(floor(t / msPerSecond), SecondsPerMinute);
+};
Index: frontend/node_modules/es-abstract/2022/Set.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Set.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Set.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,45 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+
+// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated
+var noThrowOnStrictViolation = (function () {
+	try {
+		delete [].length;
+		return true;
+	} catch (e) {
+		return false;
+	}
+}());
+
+// https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw
+
+module.exports = function Set(O, P, V, Throw) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: `O` must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: `P` must be a Property Key');
+	}
+	if (typeof Throw !== 'boolean') {
+		throw new $TypeError('Assertion failed: `Throw` must be a Boolean');
+	}
+	if (Throw) {
+		O[P] = V; // eslint-disable-line no-param-reassign
+		if (noThrowOnStrictViolation && !SameValue(O[P], V)) {
+			throw new $TypeError('Attempted to assign to readonly property.');
+		}
+		return true;
+	}
+	try {
+		O[P] = V; // eslint-disable-line no-param-reassign
+		return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+	} catch (e) {
+		return false;
+	}
+
+};
Index: frontend/node_modules/es-abstract/2022/SetFunctionLength.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SetFunctionLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SetFunctionLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var HasOwnProperty = require('./HasOwnProperty');
+var IsExtensible = require('./IsExtensible');
+
+// https://262.ecma-international.org/12.0/#sec-setfunctionlength
+
+module.exports = function SetFunctionLength(F, length) {
+	if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) {
+		throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property');
+	}
+	if (typeof length !== 'number') {
+		throw new $TypeError('Assertion failed: `length` must be a Number');
+	}
+	if (length !== Infinity && (!isInteger(length) || length < 0)) {
+		throw new $TypeError('Assertion failed: `length` must be ∞, or an integer >= 0');
+	}
+	return DefinePropertyOrThrow(F, 'length', {
+		'[[Configurable]]': true,
+		'[[Enumerable]]': false,
+		'[[Value]]': length,
+		'[[Writable]]': false
+	});
+};
Index: frontend/node_modules/es-abstract/2022/SetFunctionName.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SetFunctionName.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SetFunctionName.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+'use strict';
+
+var hasOwn = require('hasown');
+
+var $TypeError = require('es-errors/type');
+
+var getSymbolDescription = require('get-symbol-description');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+
+// https://262.ecma-international.org/6.0/#sec-setfunctionname
+
+module.exports = function SetFunctionName(F, name) {
+	if (typeof F !== 'function') {
+		throw new $TypeError('Assertion failed: `F` must be a function');
+	}
+	if (!IsExtensible(F) || hasOwn(F, 'name')) {
+		throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property');
+	}
+	if (typeof name !== 'symbol' && typeof name !== 'string') {
+		throw new $TypeError('Assertion failed: `name` must be a Symbol or a String');
+	}
+	if (typeof name === 'symbol') {
+		var description = getSymbolDescription(name);
+		// eslint-disable-next-line no-param-reassign
+		name = typeof description === 'undefined' ? '' : '[' + description + ']';
+	}
+	if (arguments.length > 2) {
+		var prefix = arguments[2];
+		// eslint-disable-next-line no-param-reassign
+		name = prefix + ' ' + name;
+	}
+	return DefinePropertyOrThrow(F, 'name', {
+		'[[Value]]': name,
+		'[[Writable]]': false,
+		'[[Enumerable]]': false,
+		'[[Configurable]]': true
+	});
+};
Index: frontend/node_modules/es-abstract/2022/SetIntegrityLevel.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SetIntegrityLevel.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SetIntegrityLevel.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,57 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var $gOPD = require('gopd');
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true);
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true);
+
+var forEach = require('../helpers/forEach');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-setintegritylevel
+
+module.exports = function SetIntegrityLevel(O, level) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (level !== 'sealed' && level !== 'frozen') {
+		throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+	}
+	if (!$preventExtensions) {
+		throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support');
+	}
+	var status = $preventExtensions(O);
+	if (!status) {
+		return false;
+	}
+	if (!$gOPN) {
+		throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
+	}
+	var theKeys = $gOPN(O);
+	if (level === 'sealed') {
+		forEach(theKeys, function (k) {
+			DefinePropertyOrThrow(O, k, { configurable: false });
+		});
+	} else if (level === 'frozen') {
+		forEach(theKeys, function (k) {
+			var currentDesc = $gOPD(O, k);
+			if (typeof currentDesc !== 'undefined') {
+				var desc;
+				if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
+					desc = { configurable: false };
+				} else {
+					desc = { configurable: false, writable: false };
+				}
+				DefinePropertyOrThrow(O, k, desc);
+			}
+		});
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/2022/SetTypedArrayFromArrayLike.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SetTypedArrayFromArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SetTypedArrayFromArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,94 @@
+'use strict';
+
+var $RangeError = require('es-errors/range');
+var $TypeError = require('es-errors/type');
+
+var isInteger = require('math-intrinsics/isInteger');
+var isTypedArray = require('is-typed-array');
+var typedArrayBuffer = require('typed-array-buffer');
+var typedArrayByteOffset = require('typed-array-byte-offset');
+var typedArrayLength = require('typed-array-length');
+var whichTypedArray = require('which-typed-array');
+
+var Get = require('./Get');
+var IsBigIntElementType = require('./IsBigIntElementType');
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+var LengthOfArrayLike = require('./LengthOfArrayLike');
+var SetValueInBuffer = require('./SetValueInBuffer');
+var ToBigInt = require('./ToBigInt');
+var ToNumber = require('./ToNumber');
+var ToObject = require('./ToObject');
+var ToString = require('./ToString');
+var TypedArrayElementSize = require('./TypedArrayElementSize');
+var TypedArrayElementType = require('./TypedArrayElementType');
+
+// https://262.ecma-international.org/13.0/#sec-settypedarrayfromarraylike
+
+module.exports = function SetTypedArrayFromArrayLike(target, targetOffset, source) {
+	var whichTarget = whichTypedArray(target);
+	if (!whichTarget) {
+		throw new $TypeError('Assertion failed: target must be a TypedArray instance');
+	}
+
+	if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) {
+		throw new $TypeError('Assertion failed: targetOffset must be a non-negative integer or +Infinity');
+	}
+
+	if (isTypedArray(source)) {
+		throw new $TypeError('Assertion failed: source must not be a TypedArray instance');
+	}
+
+	var targetBuffer = typedArrayBuffer(target); // step 1
+
+	if (IsDetachedBuffer(targetBuffer)) {
+		throw new $TypeError('target’s buffer is detached'); // step 2
+	}
+
+	var targetLength = typedArrayLength(target); // step 3
+
+	var targetElementSize = TypedArrayElementSize(target); // step 4
+
+	var targetType = TypedArrayElementType(target); // step 5
+
+	var targetByteOffset = typedArrayByteOffset(target); // step 6
+
+	var src = ToObject(source); // step 7
+
+	var srcLength = LengthOfArrayLike(src); // step 8
+
+	if (targetOffset === Infinity) {
+		throw new $RangeError('targetOffset must be a finite integer'); // step 9
+	}
+
+	if (srcLength + targetOffset > targetLength) {
+		throw new $RangeError('targetOffset + srcLength must be <= target.length'); // step 10
+	}
+
+	var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 11
+
+	var k = 0; // step 12
+
+	var limit = targetByteIndex + (targetElementSize * srcLength); // step 13
+
+	while (targetByteIndex < limit) { // step 14
+		var Pk = ToString(k); // step 14.a
+
+		var value = Get(src, Pk); // step 14.b
+
+		if (IsBigIntElementType(targetType)) {
+			value = ToBigInt(value); // step 14.c
+		} else {
+			value = ToNumber(value); // step 14.d
+		}
+
+		if (IsDetachedBuffer(targetBuffer)) {
+			throw new $TypeError('target’s buffer is detached'); // step 14.e
+		}
+
+		SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'Unordered'); // step 14.f
+
+		k += 1; // step 14.g
+
+		targetByteIndex += targetElementSize; // step 14.h
+	}
+};
Index: frontend/node_modules/es-abstract/2022/SetTypedArrayFromTypedArray.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SetTypedArrayFromTypedArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SetTypedArrayFromTypedArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,134 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $RangeError = require('es-errors/range');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true);
+
+var typedArrayBuffer = require('typed-array-buffer');
+var typedArrayByteLength = require('typed-array-byte-length');
+var typedArrayByteOffset = require('typed-array-byte-offset');
+var typedArrayLength = require('typed-array-length');
+var whichTypedArray = require('which-typed-array');
+var isInteger = require('math-intrinsics/isInteger');
+
+var CloneArrayBuffer = require('./CloneArrayBuffer');
+var GetValueFromBuffer = require('./GetValueFromBuffer');
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+var IsSharedArrayBuffer = require('./IsSharedArrayBuffer');
+var SameValue = require('./SameValue');
+var SetValueInBuffer = require('./SetValueInBuffer');
+var TypedArrayElementSize = require('./TypedArrayElementSize');
+var TypedArrayElementType = require('./TypedArrayElementType');
+
+// https://262.ecma-international.org/13.0/#sec-settypedarrayfromtypedarray
+
+module.exports = function SetTypedArrayFromTypedArray(target, targetOffset, source) {
+	var whichTarget = whichTypedArray(target);
+	if (!whichTarget) {
+		throw new $TypeError('Assertion failed: target must be a TypedArray instance');
+	}
+
+	if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) {
+		throw new $TypeError('Assertion failed: targetOffset must be a non-negative integer or +Infinity');
+	}
+
+	var whichSource = whichTypedArray(source);
+	if (!whichSource) {
+		throw new $TypeError('Assertion failed: source must be a TypedArray instance');
+	}
+
+	var targetBuffer = typedArrayBuffer(target); // step 1
+
+	if (IsDetachedBuffer(targetBuffer)) {
+		throw new $TypeError('target’s buffer is detached'); // step 2
+	}
+
+	var targetLength = typedArrayLength(target); // step 3
+
+	var srcBuffer = typedArrayBuffer(source); // step 4
+
+	if (IsDetachedBuffer(srcBuffer)) {
+		throw new $TypeError('source’s buffer is detached'); // step 5
+	}
+
+	var targetType = TypedArrayElementType(target); // step 6
+
+	var targetElementSize = TypedArrayElementSize(target); // step 7
+
+	var targetByteOffset = typedArrayByteOffset(target); // step 8
+
+	var srcType = TypedArrayElementType(source); // step 9
+
+	var srcElementSize = TypedArrayElementSize(source); // step 10
+
+	var srcLength = typedArrayLength(source); // step 11
+
+	var srcByteOffset = typedArrayByteOffset(source); // step 12
+
+	if (targetOffset === Infinity) {
+		throw new $RangeError('targetOffset must be a non-negative integer or +Infinity'); // step 13
+	}
+
+	if (srcLength + targetOffset > targetLength) {
+		throw new $RangeError('targetOffset + source.length must not be greater than target.length'); // step 14
+	}
+
+	var targetContentType = whichTarget === 'BigInt64Array' || whichTarget === 'BigUint64Array' ? 'BigInt' : 'Number';
+	var sourceContentType = whichSource === 'BigInt64Array' || whichSource === 'BigUint64Array' ? 'BigInt' : 'Number';
+	if (targetContentType !== sourceContentType) {
+		throw new $TypeError('source and target must have the same content type'); // step 15
+	}
+
+	var same;
+	if (IsSharedArrayBuffer(srcBuffer) && IsSharedArrayBuffer(targetBuffer)) { // step 16
+		// a. If srcBuffer.[[ArrayBufferData]] and targetBuffer.[[ArrayBufferData]] are the same Shared Data Block values, let same be true; else let same be false.
+		throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation');
+	} else {
+		same = SameValue(srcBuffer, targetBuffer); // step 17
+	}
+
+	var srcByteIndex;
+	if (same) { // step 18
+		var srcByteLength = typedArrayByteLength(source); // step 18.a
+
+		srcBuffer = CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, $ArrayBuffer); // step 18.b
+
+		// c. NOTE: %ArrayBuffer% is used to clone srcBuffer because is it known to not have any observable side-effects.
+
+		srcByteIndex = 0; // step 18.d
+	} else {
+		srcByteIndex = srcByteOffset; // step 19
+	}
+
+	var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 20
+
+	var limit = targetByteIndex + (targetElementSize * srcLength); // step 21
+
+	var value;
+	if (srcType === targetType) { // step 22
+		// a. NOTE: If srcType and targetType are the same, the transfer must be performed in a manner that preserves the bit-level encoding of the source data.
+
+		while (targetByteIndex < limit) { // step 22.b
+			value = GetValueFromBuffer(srcBuffer, srcByteIndex, 'Uint8', true, 'Unordered'); // step 22.b.i
+
+			SetValueInBuffer(targetBuffer, targetByteIndex, 'Uint8', value, true, 'Unordered'); // step 22.b.ii
+
+			srcByteIndex += 1; // step 22.b.iii
+
+			targetByteIndex += 1; // step 22.b.iv
+		}
+	} else { // step 23
+		while (targetByteIndex < limit) { // step 23.a
+			value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, 'Unordered'); // step 23.a.i
+
+			SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'Unordered'); // step 23.a.ii
+
+			srcByteIndex += srcElementSize; // step 23.a.iii
+
+			targetByteIndex += targetElementSize; // step 23.a.iv
+		}
+	}
+};
Index: frontend/node_modules/es-abstract/2022/SetValueInBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SetValueInBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SetValueInBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,92 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var $Uint8Array = GetIntrinsic('%Uint8Array%', true);
+
+var IsBigIntElementType = require('./IsBigIntElementType');
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+var NumericToRawBytes = require('./NumericToRawBytes');
+
+var isArrayBuffer = require('is-array-buffer');
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+var hasOwn = require('hasown');
+
+var tableTAO = require('./tables/typed-array-objects');
+
+var defaultEndianness = require('../helpers/defaultEndianness');
+var forEach = require('../helpers/forEach');
+
+// https://262.ecma-international.org/12.0/#sec-setvalueinbuffer
+
+/* eslint max-params: 0 */
+
+module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) {
+	var isSAB = isSharedArrayBuffer(arrayBuffer);
+	if (!isArrayBuffer(arrayBuffer) && !isSAB) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer');
+	}
+
+	if (!isInteger(byteIndex) || byteIndex < 0) {
+		throw new $TypeError('Assertion failed: `byteIndex` must be a non-negative integer');
+	}
+
+	if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) {
+		throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices);
+	}
+
+	if (typeof value !== 'number' && typeof value !== 'bigint') {
+		throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt');
+	}
+
+	if (typeof isTypedArray !== 'boolean') {
+		throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean');
+	}
+	if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') {
+		throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`');
+	}
+
+	if (arguments.length > 6 && typeof arguments[6] !== 'boolean') {
+		throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present');
+	}
+
+	if (IsDetachedBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1
+	}
+
+	// 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type.
+
+	if (IsBigIntElementType(type) ? typeof value !== 'bigint' : typeof value !== 'number') { // step 3
+		throw new $TypeError('Assertion failed: `value` must be a BigInt if type is BigInt64 or BigUint64, otherwise a Number');
+	}
+
+	// 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot.
+
+	var elementSize = tableTAO.size['$' + type]; // step 5
+
+	// 6. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation.
+	var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 6
+
+	var rawBytes = NumericToRawBytes(type, value, isLittleEndian); // step 7
+
+	if (isSAB) { // step 8
+		/*
+			Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record.
+			Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier().
+			If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false.
+			Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList.
+		*/
+		throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation');
+	} else {
+		// 9. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex].
+		var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize);
+		forEach(rawBytes, function (rawByte, i) {
+			arr[i] = rawByte;
+		});
+	}
+
+	// 10. Return NormalCompletion(undefined).
+};
Index: frontend/node_modules/es-abstract/2022/SortIndexedProperties.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SortIndexedProperties.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SortIndexedProperties.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,62 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var isObject = require('es-object-atoms/isObject');
+
+var DeletePropertyOrThrow = require('./DeletePropertyOrThrow');
+var Get = require('./Get');
+var HasProperty = require('./HasProperty');
+var Set = require('./Set');
+var ToString = require('./ToString');
+
+var isAbstractClosure = require('../helpers/isAbstractClosure');
+
+var $sort = callBound('Array.prototype.sort');
+
+// https://262.ecma-international.org/13.0/#sec-sortindexedproperties
+
+module.exports = function SortIndexedProperties(obj, len, SortCompare) {
+	if (!isObject(obj)) {
+		throw new $TypeError('Assertion failed: Type(obj) is not Object');
+	}
+	if (!isInteger(len) || len < 0) {
+		throw new $TypeError('Assertion failed: `len` must be an integer >= 0');
+	}
+	if (!isAbstractClosure(SortCompare) || SortCompare.length !== 2) {
+		throw new $TypeError('Assertion failed: `SortCompare` must be an abstract closure taking 2 arguments');
+	}
+
+	var items = []; // step 1
+
+	var k = 0; // step 2
+
+	while (k < len) { // step 3
+		var Pk = ToString(k);
+		var kPresent = HasProperty(obj, Pk);
+		if (kPresent) {
+			var kValue = Get(obj, Pk);
+			items[items.length] = kValue;
+		}
+		k += 1;
+	}
+
+	var itemCount = items.length; // step 4
+
+	$sort(items, SortCompare); // step 5
+
+	var j = 0; // step 6
+
+	while (j < itemCount) { // step 7
+		Set(obj, ToString(j), items[j], true);
+		j += 1;
+	}
+
+	while (j < len) { // step 8
+		DeletePropertyOrThrow(obj, ToString(j));
+		j += 1;
+	}
+	return obj; // step 9
+};
Index: frontend/node_modules/es-abstract/2022/SpeciesConstructor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SpeciesConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SpeciesConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var IsConstructor = require('./IsConstructor');
+
+// https://262.ecma-international.org/6.0/#sec-speciesconstructor
+
+module.exports = function SpeciesConstructor(O, defaultConstructor) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	var C = O.constructor;
+	if (typeof C === 'undefined') {
+		return defaultConstructor;
+	}
+	if (!isObject(C)) {
+		throw new $TypeError('O.constructor is not an Object');
+	}
+	var S = $species ? C[$species] : void 0;
+	if (S == null) {
+		return defaultConstructor;
+	}
+	if (IsConstructor(S)) {
+		return S;
+	}
+	throw new $TypeError('no constructor found');
+};
Index: frontend/node_modules/es-abstract/2022/StringCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/StringCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/StringCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Object = require('es-object-atoms');
+var $StringPrototype = GetIntrinsic('%String.prototype%');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var setProto = require('set-proto');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+
+// https://262.ecma-international.org/6.0/#sec-stringcreate
+
+module.exports = function StringCreate(value, prototype) {
+	if (typeof value !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+
+	var S = $Object(value);
+	if (prototype !== $StringPrototype) {
+		if (setProto) {
+			setProto(S, prototype);
+		} else {
+			throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+		}
+	}
+
+	var length = value.length;
+	DefinePropertyOrThrow(S, 'length', {
+		'[[Configurable]]': false,
+		'[[Enumerable]]': false,
+		'[[Value]]': length,
+		'[[Writable]]': false
+	});
+
+	return S;
+};
Index: frontend/node_modules/es-abstract/2022/StringGetOwnProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2022/StringGetOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/StringGetOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,46 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isNegativeZero = require('math-intrinsics/isNegativeZero');
+var isObject = require('es-object-atoms/isObject');
+
+var callBound = require('call-bound');
+var $charAt = callBound('String.prototype.charAt');
+var $stringToString = callBound('String.prototype.toString');
+
+var CanonicalNumericIndexString = require('./CanonicalNumericIndexString');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+var isInteger = require('math-intrinsics/isInteger');
+
+// https://262.ecma-international.org/12.0/#sec-stringgetownproperty
+
+module.exports = function StringGetOwnProperty(S, P) {
+	var str;
+	if (isObject(S)) {
+		try {
+			str = $stringToString(S);
+		} catch (e) { /**/ }
+	}
+	if (typeof str !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a boxed string object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+	if (typeof P !== 'string') {
+		return void undefined;
+	}
+	var index = CanonicalNumericIndexString(P);
+	var len = str.length;
+	if (typeof index === 'undefined' || !isInteger(index) || isNegativeZero(index) || index < 0 || len <= index) {
+		return void undefined;
+	}
+	var resultStr = $charAt(S, index);
+	return {
+		'[[Configurable]]': false,
+		'[[Enumerable]]': true,
+		'[[Value]]': resultStr,
+		'[[Writable]]': false
+	};
+};
Index: frontend/node_modules/es-abstract/2022/StringIndexOf.js
===================================================================
--- frontend/node_modules/es-abstract/2022/StringIndexOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/StringIndexOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+
+var $slice = callBound('String.prototype.slice');
+
+// https://262.ecma-international.org/12.0/#sec-stringindexof
+
+module.exports = function StringIndexOf(string, searchValue, fromIndex) {
+	if (typeof string !== 'string') {
+		throw new $TypeError('Assertion failed: `string` must be a String');
+	}
+	if (typeof searchValue !== 'string') {
+		throw new $TypeError('Assertion failed: `searchValue` must be a String');
+	}
+	if (!isInteger(fromIndex) || fromIndex < 0) {
+		throw new $TypeError('Assertion failed: `fromIndex` must be a non-negative integer');
+	}
+
+	var len = string.length;
+	if (searchValue === '' && fromIndex <= len) {
+		return fromIndex;
+	}
+
+	var searchLen = searchValue.length;
+	for (var i = fromIndex; i <= (len - searchLen); i += 1) {
+		var candidate = $slice(string, i, i + searchLen);
+		if (candidate === searchValue) {
+			return i;
+		}
+	}
+	return -1;
+};
Index: frontend/node_modules/es-abstract/2022/StringPad.js
===================================================================
--- frontend/node_modules/es-abstract/2022/StringPad.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/StringPad.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,41 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+
+var $strSlice = callBound('String.prototype.slice');
+
+// https://262.ecma-international.org/11.0/#sec-stringpad
+
+module.exports = function StringPad(O, maxLength, fillString, placement) {
+	if (placement !== 'start' && placement !== 'end') {
+		throw new $TypeError('Assertion failed: `placement` must be "start" or "end"');
+	}
+	var S = ToString(O);
+	var intMaxLength = ToLength(maxLength);
+	var stringLength = S.length;
+	if (intMaxLength <= stringLength) {
+		return S;
+	}
+	var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString);
+	if (filler === '') {
+		return S;
+	}
+	var fillLen = intMaxLength - stringLength;
+
+	// the String value consisting of repeated concatenations of filler truncated to length fillLen.
+	var truncatedStringFiller = '';
+	while (truncatedStringFiller.length < fillLen) {
+		truncatedStringFiller += filler;
+	}
+	truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen);
+
+	if (placement === 'start') {
+		return truncatedStringFiller + S;
+	}
+	return S + truncatedStringFiller;
+};
Index: frontend/node_modules/es-abstract/2022/StringToBigInt.js
===================================================================
--- frontend/node_modules/es-abstract/2022/StringToBigInt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/StringToBigInt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $TypeError = require('es-errors/type');
+var $SyntaxError = require('es-errors/syntax');
+
+// https://262.ecma-international.org/14.0/#sec-stringtobigint
+
+module.exports = function StringToBigInt(argument) {
+	if (typeof argument !== 'string') {
+		throw new $TypeError('`argument` must be a string');
+	}
+	if (!$BigInt) {
+		throw new $SyntaxError('BigInts are not supported in this environment');
+	}
+	try {
+		return $BigInt(argument);
+	} catch (e) {
+		return void undefined;
+	}
+};
Index: frontend/node_modules/es-abstract/2022/StringToCodePoints.js
===================================================================
--- frontend/node_modules/es-abstract/2022/StringToCodePoints.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/StringToCodePoints.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var CodePointAt = require('./CodePointAt');
+
+// https://262.ecma-international.org/12.0/#sec-stringtocodepoints
+
+module.exports = function StringToCodePoints(string) {
+	if (typeof string !== 'string') {
+		throw new $TypeError('Assertion failed: `string` must be a String');
+	}
+	var codePoints = [];
+	var size = string.length;
+	var position = 0;
+	while (position < size) {
+		var cp = CodePointAt(string, position);
+		codePoints[codePoints.length] = cp['[[CodePoint]]'];
+		position += cp['[[CodeUnitCount]]'];
+	}
+	return codePoints;
+};
Index: frontend/node_modules/es-abstract/2022/StringToNumber.js
===================================================================
--- frontend/node_modules/es-abstract/2022/StringToNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/StringToNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $RegExp = GetIntrinsic('%RegExp%');
+var $TypeError = require('es-errors/type');
+var $parseInteger = GetIntrinsic('%parseInt%');
+
+var callBound = require('call-bound');
+var regexTester = require('safe-regex-test');
+
+var $strSlice = callBound('String.prototype.slice');
+var isBinary = regexTester(/^0b[01]+$/i);
+var isOctal = regexTester(/^0o[0-7]+$/i);
+var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
+var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
+var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
+var hasNonWS = regexTester(nonWSregex);
+
+var $trim = require('string.prototype.trim');
+
+// https://262.ecma-international.org/13.0/#sec-stringtonumber
+
+module.exports = function StringToNumber(argument) {
+	if (typeof argument !== 'string') {
+		throw new $TypeError('Assertion failed: `argument` is not a String');
+	}
+	if (isBinary(argument)) {
+		return +$parseInteger($strSlice(argument, 2), 2);
+	}
+	if (isOctal(argument)) {
+		return +$parseInteger($strSlice(argument, 2), 8);
+	}
+	if (hasNonWS(argument) || isInvalidHexLiteral(argument)) {
+		return NaN;
+	}
+	var trimmed = $trim(argument);
+	if (trimmed !== argument) {
+		return StringToNumber(trimmed);
+	}
+	return +argument;
+};
Index: frontend/node_modules/es-abstract/2022/SymbolDescriptiveString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/SymbolDescriptiveString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/SymbolDescriptiveString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+
+var $SymbolToString = callBound('Symbol.prototype.toString', true);
+
+// https://262.ecma-international.org/6.0/#sec-symboldescriptivestring
+
+module.exports = function SymbolDescriptiveString(sym) {
+	if (typeof sym !== 'symbol') {
+		throw new $TypeError('Assertion failed: `sym` must be a Symbol');
+	}
+	return $SymbolToString(sym);
+};
Index: frontend/node_modules/es-abstract/2022/TestIntegrityLevel.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TestIntegrityLevel.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TestIntegrityLevel.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+'use strict';
+
+var $gOPD = require('gopd');
+var $TypeError = require('es-errors/type');
+
+var every = require('../helpers/every');
+var OwnPropertyKeys = require('own-keys');
+var isObject = require('es-object-atoms/isObject');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-testintegritylevel
+
+module.exports = function TestIntegrityLevel(O, level) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (level !== 'sealed' && level !== 'frozen') {
+		throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+	}
+	var status = IsExtensible(O);
+	if (status || !$gOPD) {
+		return false;
+	}
+	var theKeys = OwnPropertyKeys(O);
+	return theKeys.length === 0 || every(theKeys, function (k) {
+		var currentDesc = $gOPD(O, k);
+		if (typeof currentDesc !== 'undefined') {
+			if (currentDesc.configurable) {
+				return false;
+			}
+			if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
+				return false;
+			}
+		}
+		return true;
+	});
+};
Index: frontend/node_modules/es-abstract/2022/ThrowCompletion.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ThrowCompletion.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ThrowCompletion.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var CompletionRecord = require('./CompletionRecord');
+
+// https://262.ecma-international.org/9.0/#sec-throwcompletion
+
+module.exports = function ThrowCompletion(argument) {
+	return new CompletionRecord('throw', argument);
+};
Index: frontend/node_modules/es-abstract/2022/TimeClip.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TimeClip.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TimeClip.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var $isFinite = require('math-intrinsics/isFinite');
+var abs = require('math-intrinsics/abs');
+
+var ToNumber = require('./ToNumber');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+	if (!$isFinite(time) || abs(time) > 8.64e15) {
+		return NaN;
+	}
+	return +new $Date(ToNumber(time));
+};
+
Index: frontend/node_modules/es-abstract/2022/TimeFromYear.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TimeFromYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TimeFromYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+	return msPerDay * DayFromYear(y);
+};
Index: frontend/node_modules/es-abstract/2022/TimeString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TimeString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TimeString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+var HourFromTime = require('./HourFromTime');
+var MinFromTime = require('./MinFromTime');
+var SecFromTime = require('./SecFromTime');
+var ToZeroPaddedDecimalString = require('./ToZeroPaddedDecimalString');
+
+// https://262.ecma-international.org/13.0/#sec-timestring
+
+module.exports = function TimeString(tv) {
+	if (typeof tv !== 'number' || $isNaN(tv)) {
+		throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+	}
+
+	var hour = ToZeroPaddedDecimalString(HourFromTime(tv), 2); // step 1
+
+	var minute = ToZeroPaddedDecimalString(MinFromTime(tv), 2); // step 2
+
+	var second = ToZeroPaddedDecimalString(SecFromTime(tv), 2); // step 3
+
+	return hour + ':' + minute + ':' + second + ' GMT'; // step 4
+};
Index: frontend/node_modules/es-abstract/2022/TimeWithinDay.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TimeWithinDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TimeWithinDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+	return modulo(t, msPerDay);
+};
+
Index: frontend/node_modules/es-abstract/2022/TimeZoneString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TimeZoneString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TimeZoneString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $TypeError = require('es-errors/type');
+
+var isNaN = require('math-intrinsics/isNaN');
+
+var callBound = require('call-bound');
+
+var $indexOf = callBound('String.prototype.indexOf');
+var $slice = callBound('String.prototype.slice');
+var $toTimeString = callBound('Date.prototype.toTimeString');
+
+// https://262.ecma-international.org/13.0/#sec-timezoneestring
+
+module.exports = function TimeZoneString(tv) {
+	if (typeof tv !== 'number' || isNaN(tv)) {
+		throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+	}
+
+	// 1. Let offset be LocalTZA(tv, true).
+	// 2. If offset is +0𝔽 or offset > +0𝔽, then
+	//   a. Let offsetSign be "+".
+	//   b. Let absOffset be offset.
+	// 3. Else,
+	//   a. Let offsetSign be "-".
+	//   b. Let absOffset be -offset.
+	// 4. Let offsetMin be ToZeroPaddedDecimalString(ℝ(MinFromTime(absOffset)), 2).
+	// 5. Let offsetHour be ToZeroPaddedDecimalString(ℝ(HourFromTime(absOffset)), 2).
+	// 6. Let tzName be an implementation-defined string that is either the empty String or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-defined timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS).
+	// 7. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName.
+
+	// hack until LocalTZA, and "implementation-defined string" are available
+	var ts = $toTimeString(new $Date(tv));
+	return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')'));
+};
Index: frontend/node_modules/es-abstract/2022/ToBigInt.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToBigInt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToBigInt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = require('es-errors/type');
+var $SyntaxError = require('es-errors/syntax');
+
+var StringToBigInt = require('./StringToBigInt');
+var ToPrimitive = require('./ToPrimitive');
+
+// https://262.ecma-international.org/13.0/#sec-tobigint
+
+module.exports = function ToBigInt(argument) {
+	if (!$BigInt) {
+		throw new $SyntaxError('BigInts are not supported in this environment');
+	}
+
+	var prim = ToPrimitive(argument, $Number);
+
+	if (prim == null) {
+		throw new $TypeError('Cannot convert null or undefined to a BigInt');
+	}
+
+	if (typeof prim === 'boolean') {
+		return prim ? $BigInt(1) : $BigInt(0);
+	}
+
+	if (typeof prim === 'number') {
+		throw new $TypeError('Cannot convert a Number value to a BigInt');
+	}
+
+	if (typeof prim === 'string') {
+		var n = StringToBigInt(prim);
+		if (typeof n === 'undefined') {
+			throw new $TypeError('Failed to parse String to BigInt');
+		}
+		return n;
+	}
+
+	if (typeof prim === 'symbol') {
+		throw new $TypeError('Cannot convert a Symbol value to a BigInt');
+	}
+
+	if (typeof prim !== 'bigint') {
+		throw new $SyntaxError('Assertion failed: unknown primitive type');
+	}
+
+	return prim;
+};
Index: frontend/node_modules/es-abstract/2022/ToBigInt64.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToBigInt64.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToBigInt64.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $pow = require('math-intrinsics/pow');
+
+var ToBigInt = require('./ToBigInt');
+var BigIntRemainder = require('./BigInt/remainder');
+
+var modBigInt = require('../helpers/modBigInt');
+
+// BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31)));
+
+// BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32)));
+
+// https://262.ecma-international.org/11.0/#sec-tobigint64
+
+module.exports = function ToBigInt64(argument) {
+	var n = ToBigInt(argument);
+	var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour);
+	return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit;
+};
Index: frontend/node_modules/es-abstract/2022/ToBigUint64.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToBigUint64.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToBigUint64.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+
+var $pow = require('math-intrinsics/pow');
+
+var ToBigInt = require('./ToBigInt');
+var BigIntRemainder = require('./BigInt/remainder');
+
+var modBigInt = require('../helpers/modBigInt');
+
+// BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32)));
+
+// https://262.ecma-international.org/11.0/#sec-tobiguint64
+
+module.exports = function ToBigUint64(argument) {
+	var n = ToBigInt(argument);
+	var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour);
+	return int64bit;
+};
Index: frontend/node_modules/es-abstract/2022/ToBoolean.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToBoolean.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToBoolean.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://262.ecma-international.org/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
Index: frontend/node_modules/es-abstract/2022/ToDateString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToDateString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToDateString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $Date = GetIntrinsic('%Date%');
+var $String = GetIntrinsic('%String%');
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+// https://262.ecma-international.org/6.0/#sec-todatestring
+
+module.exports = function ToDateString(tv) {
+	if (typeof tv !== 'number') {
+		throw new $TypeError('Assertion failed: `tv` must be a Number');
+	}
+	if ($isNaN(tv)) {
+		return 'Invalid Date';
+	}
+	return $String(new $Date(tv));
+};
Index: frontend/node_modules/es-abstract/2022/ToIndex.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var $RangeError = require('es-errors/range');
+
+var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
+var ToLength = require('./ToLength');
+var SameValue = require('./SameValue');
+
+// https://262.ecma-international.org/8.0/#sec-toindex
+
+module.exports = function ToIndex(value) {
+	if (typeof value === 'undefined') {
+		return 0;
+	}
+	var integerIndex = ToIntegerOrInfinity(value);
+	if (integerIndex < 0) {
+		throw new $RangeError('index must be >= 0');
+	}
+	var index = ToLength(integerIndex);
+	if (!SameValue(integerIndex, index)) {
+		throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1');
+	}
+	return index;
+};
Index: frontend/node_modules/es-abstract/2022/ToInt16.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToInt16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToInt16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint16 = require('./ToUint16');
+
+// https://262.ecma-international.org/6.0/#sec-toint16
+
+module.exports = function ToInt16(argument) {
+	var int16bit = ToUint16(argument);
+	return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
+};
Index: frontend/node_modules/es-abstract/2022/ToInt32.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToInt32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToInt32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://262.ecma-international.org/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+	return ToNumber(x) >> 0;
+};
Index: frontend/node_modules/es-abstract/2022/ToInt8.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToInt8.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToInt8.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint8 = require('./ToUint8');
+
+// https://262.ecma-international.org/6.0/#sec-toint8
+
+module.exports = function ToInt8(argument) {
+	var int8bit = ToUint8(argument);
+	return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
+};
Index: frontend/node_modules/es-abstract/2022/ToIntegerOrInfinity.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToIntegerOrInfinity.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToIntegerOrInfinity.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var abs = require('./abs');
+var floor = require('./floor');
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('math-intrinsics/isNaN');
+var $isFinite = require('math-intrinsics/isFinite');
+var $sign = require('math-intrinsics/sign');
+
+// https://262.ecma-international.org/12.0/#sec-tointegerorinfinity
+
+module.exports = function ToIntegerOrInfinity(value) {
+	var number = ToNumber(value);
+	if ($isNaN(number) || number === 0) { return 0; }
+	if (!$isFinite(number)) { return number; }
+	var integer = floor(abs(number));
+	if (integer === 0) { return 0; }
+	return $sign(number) * integer;
+};
Index: frontend/node_modules/es-abstract/2022/ToLength.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger');
+
+var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
+
+// https://262.ecma-international.org/12.0/#sec-tolength
+
+module.exports = function ToLength(argument) {
+	var len = ToIntegerOrInfinity(argument);
+	if (len <= 0) { return 0; } // includes converting -0 to +0
+	if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
+	return len;
+};
Index: frontend/node_modules/es-abstract/2022/ToNumber.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $Number = GetIntrinsic('%Number%');
+var isPrimitive = require('../helpers/isPrimitive');
+
+var ToPrimitive = require('./ToPrimitive');
+var StringToNumber = require('./StringToNumber');
+
+// https://262.ecma-international.org/13.0/#sec-tonumber
+
+module.exports = function ToNumber(argument) {
+	var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+	if (typeof value === 'symbol') {
+		throw new $TypeError('Cannot convert a Symbol value to a number');
+	}
+	if (typeof value === 'bigint') {
+		throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.');
+	}
+	if (typeof value === 'string') {
+		return StringToNumber(value);
+	}
+	return +value;
+};
Index: frontend/node_modules/es-abstract/2022/ToNumeric.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToNumeric.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToNumeric.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToNumber = require('./ToNumber');
+
+// https://262.ecma-international.org/11.0/#sec-tonumeric
+
+module.exports = function ToNumeric(argument) {
+	var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+	if (typeof primValue === 'bigint') {
+		return primValue;
+	}
+	return ToNumber(primValue);
+};
Index: frontend/node_modules/es-abstract/2022/ToObject.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#sec-toobject
+
+module.exports = require('es-object-atoms/ToObject');
Index: frontend/node_modules/es-abstract/2022/ToPrimitive.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToPrimitive.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToPrimitive.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var toPrimitive = require('es-to-primitive/es2015');
+
+// https://262.ecma-international.org/6.0/#sec-toprimitive
+
+module.exports = function ToPrimitive(input) {
+	if (arguments.length > 1) {
+		return toPrimitive(input, arguments[1]);
+	}
+	return toPrimitive(input);
+};
Index: frontend/node_modules/es-abstract/2022/ToPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,50 @@
+'use strict';
+
+var hasOwn = require('hasown');
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var IsCallable = require('./IsCallable');
+var ToBoolean = require('./ToBoolean');
+
+// https://262.ecma-international.org/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+	if (!isObject(Obj)) {
+		throw new $TypeError('ToPropertyDescriptor requires an object');
+	}
+
+	var desc = {};
+	if (hasOwn(Obj, 'enumerable')) {
+		desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+	}
+	if (hasOwn(Obj, 'configurable')) {
+		desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+	}
+	if (hasOwn(Obj, 'value')) {
+		desc['[[Value]]'] = Obj.value;
+	}
+	if (hasOwn(Obj, 'writable')) {
+		desc['[[Writable]]'] = ToBoolean(Obj.writable);
+	}
+	if (hasOwn(Obj, 'get')) {
+		var getter = Obj.get;
+		if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+			throw new $TypeError('getter must be a function');
+		}
+		desc['[[Get]]'] = getter;
+	}
+	if (hasOwn(Obj, 'set')) {
+		var setter = Obj.set;
+		if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+			throw new $TypeError('setter must be a function');
+		}
+		desc['[[Set]]'] = setter;
+	}
+
+	if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) {
+		throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+	}
+	return desc;
+};
Index: frontend/node_modules/es-abstract/2022/ToPropertyKey.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-topropertykey
+
+module.exports = function ToPropertyKey(argument) {
+	var key = ToPrimitive(argument, $String);
+	return typeof key === 'symbol' ? key : ToString(key);
+};
Index: frontend/node_modules/es-abstract/2022/ToString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/6.0/#sec-tostring
+
+module.exports = function ToString(argument) {
+	if (typeof argument === 'symbol') {
+		throw new $TypeError('Cannot convert a Symbol value to a string');
+	}
+	return $String(argument);
+};
Index: frontend/node_modules/es-abstract/2022/ToUint16.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToUint16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToUint16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var modulo = require('./modulo');
+var ToNumber = require('./ToNumber');
+
+var abs = require('math-intrinsics/abs');
+var floor = require('math-intrinsics/floor');
+var $isNaN = require('math-intrinsics/isNaN');
+var $isFinite = require('math-intrinsics/isFinite');
+var $sign = require('math-intrinsics/sign');
+
+// http://262.ecma-international.org/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+	var number = ToNumber(value);
+	if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+	var posInt = $sign(number) * floor(abs(number));
+	return modulo(posInt, 0x10000);
+};
Index: frontend/node_modules/es-abstract/2022/ToUint32.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToUint32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToUint32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://262.ecma-international.org/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+	return ToNumber(x) >>> 0;
+};
Index: frontend/node_modules/es-abstract/2022/ToUint8.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToUint8.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToUint8.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('math-intrinsics/isNaN');
+var $isFinite = require('math-intrinsics/isFinite');
+var $sign = require('math-intrinsics/sign');
+var abs = require('math-intrinsics/abs');
+var floor = require('math-intrinsics/floor');
+var modulo = require('math-intrinsics/mod');
+
+// https://262.ecma-international.org/6.0/#sec-touint8
+
+module.exports = function ToUint8(argument) {
+	var number = ToNumber(argument);
+	if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+	var posInt = $sign(number) * floor(abs(number));
+	return modulo(posInt, 0x100);
+};
Index: frontend/node_modules/es-abstract/2022/ToUint8Clamp.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToUint8Clamp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToUint8Clamp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var floor = require('./floor');
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+// https://262.ecma-international.org/6.0/#sec-touint8clamp
+
+module.exports = function ToUint8Clamp(argument) {
+	var number = ToNumber(argument);
+	if ($isNaN(number) || number <= 0) { return 0; }
+	if (number >= 0xFF) { return 0xFF; }
+	var f = floor(number);
+	if (f + 0.5 < number) { return f + 1; }
+	if (number < f + 0.5) { return f; }
+	if (f % 2 !== 0) { return f + 1; }
+	return f;
+};
Index: frontend/node_modules/es-abstract/2022/ToZeroPaddedDecimalString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ToZeroPaddedDecimalString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ToZeroPaddedDecimalString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $RangeError = require('es-errors/range');
+var isInteger = require('math-intrinsics/isInteger');
+
+var StringPad = require('./StringPad');
+
+// https://262.ecma-international.org/13.0/#sec-tozeropaddeddecimalstring
+
+module.exports = function ToZeroPaddedDecimalString(n, minLength) {
+	if (!isInteger(n) || n < 0) {
+		throw new $RangeError('Assertion failed: `q` must be a non-negative integer');
+	}
+	var S = $String(n);
+	return StringPad(S, minLength, '0', 'start');
+};
Index: frontend/node_modules/es-abstract/2022/TrimString.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TrimString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TrimString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+'use strict';
+
+var trimStart = require('string.prototype.trimstart');
+var trimEnd = require('string.prototype.trimend');
+
+var $TypeError = require('es-errors/type');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/10.0/#sec-trimstring
+
+module.exports = function TrimString(string, where) {
+	var str = RequireObjectCoercible(string);
+	var S = ToString(str);
+	var T;
+	if (where === 'start') {
+		T = trimStart(S);
+	} else if (where === 'end') {
+		T = trimEnd(S);
+	} else if (where === 'start+end') {
+		T = trimStart(trimEnd(S));
+	} else {
+		throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"');
+	}
+	return T;
+};
Index: frontend/node_modules/es-abstract/2022/Type.js
===================================================================
--- frontend/node_modules/es-abstract/2022/Type.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/Type.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var ES5Type = require('../5/Type');
+
+// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values
+
+module.exports = function Type(x) {
+	if (typeof x === 'symbol') {
+		return 'Symbol';
+	}
+	if (typeof x === 'bigint') {
+		return 'BigInt';
+	}
+	return ES5Type(x);
+};
Index: frontend/node_modules/es-abstract/2022/TypedArrayCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TypedArrayCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TypedArrayCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,47 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+var ValidateTypedArray = require('./ValidateTypedArray');
+
+var availableTypedArrays = require('available-typed-arrays')();
+var typedArrayLength = require('typed-array-length');
+
+// https://262.ecma-international.org/7.0/#typedarray-create
+
+module.exports = function TypedArrayCreate(constructor, argumentList) {
+	if (!IsConstructor(constructor)) {
+		throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+	}
+	if (!IsArray(argumentList)) {
+		throw new $TypeError('Assertion failed: `argumentList` must be a List');
+	}
+	if (availableTypedArrays.length === 0) {
+		throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment');
+	}
+
+	// var newTypedArray = Construct(constructor, argumentList); // step 1
+	var newTypedArray;
+	if (argumentList.length === 0) {
+		newTypedArray = new constructor();
+	} else if (argumentList.length === 1) {
+		newTypedArray = new constructor(argumentList[0]);
+	} else if (argumentList.length === 2) {
+		newTypedArray = new constructor(argumentList[0], argumentList[1]);
+	} else {
+		newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]);
+	}
+
+	ValidateTypedArray(newTypedArray); // step 2
+
+	if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3
+		if (typedArrayLength(newTypedArray) < argumentList[0]) {
+			throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a
+		}
+	}
+
+	return newTypedArray; // step 4
+};
Index: frontend/node_modules/es-abstract/2022/TypedArrayElementSize.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TypedArrayElementSize.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TypedArrayElementSize.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var whichTypedArray = require('which-typed-array');
+
+// https://262.ecma-international.org/13.0/#sec-typedarrayelementsize
+
+var tableTAO = require('./tables/typed-array-objects');
+
+module.exports = function TypedArrayElementSize(O) {
+	var type = whichTypedArray(O);
+	if (!type) {
+		throw new $TypeError('Assertion failed: `O` must be a TypedArray');
+	}
+	var size = tableTAO.size['$' + tableTAO.name['$' + type]];
+	if (!isInteger(size) || size < 0) {
+		throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`');
+	}
+
+	return size;
+};
Index: frontend/node_modules/es-abstract/2022/TypedArrayElementType.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TypedArrayElementType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TypedArrayElementType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var whichTypedArray = require('which-typed-array');
+
+// https://262.ecma-international.org/13.0/#sec-typedarrayelementtype
+
+var tableTAO = require('./tables/typed-array-objects');
+
+module.exports = function TypedArrayElementType(O) {
+	var type = whichTypedArray(O);
+	if (!type) {
+		throw new $TypeError('Assertion failed: `O` must be a TypedArray');
+	}
+	var result = tableTAO.name['$' + type];
+	if (typeof result !== 'string') {
+		throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`');
+	}
+
+	return result;
+};
Index: frontend/node_modules/es-abstract/2022/TypedArraySpeciesCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2022/TypedArraySpeciesCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/TypedArraySpeciesCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,37 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var whichTypedArray = require('which-typed-array');
+var availableTypedArrays = require('available-typed-arrays')();
+
+var IsArray = require('./IsArray');
+var SpeciesConstructor = require('./SpeciesConstructor');
+var TypedArrayCreate = require('./TypedArrayCreate');
+
+var getConstructor = require('../helpers/typedArrayConstructors');
+
+// https://262.ecma-international.org/7.0/#typedarray-species-create
+
+module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) {
+	if (availableTypedArrays.length === 0) {
+		throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment');
+	}
+
+	var kind = whichTypedArray(exemplar);
+	if (!kind) {
+		throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1
+	}
+	if (!IsArray(argumentList)) {
+		throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1
+	}
+
+	var defaultConstructor = getConstructor(kind); // step 2
+	if (typeof defaultConstructor !== 'function') {
+		throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!');
+	}
+	var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3
+
+	return TypedArrayCreate(constructor, argumentList); // step 4
+};
Index: frontend/node_modules/es-abstract/2022/UTF16EncodeCodePoint.js
===================================================================
--- frontend/node_modules/es-abstract/2022/UTF16EncodeCodePoint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/UTF16EncodeCodePoint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var isCodePoint = require('../helpers/isCodePoint');
+
+// https://262.ecma-international.org/12.0/#sec-utf16encoding
+
+module.exports = function UTF16EncodeCodePoint(cp) {
+	if (!isCodePoint(cp)) {
+		throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF');
+	}
+	if (cp <= 65535) {
+		return $fromCharCode(cp);
+	}
+	var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800);
+	var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00);
+	return cu1 + cu2;
+};
Index: frontend/node_modules/es-abstract/2022/UTF16SurrogatePairToCodePoint.js
===================================================================
--- frontend/node_modules/es-abstract/2022/UTF16SurrogatePairToCodePoint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/UTF16SurrogatePairToCodePoint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+
+var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
+var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
+
+// https://262.ecma-international.org/12.0/#sec-utf16decodesurrogatepair
+
+module.exports = function UTF16SurrogatePairToCodePoint(lead, trail) {
+	if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {
+		throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');
+	}
+	// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
+	return $fromCharCode(lead) + $fromCharCode(trail);
+};
Index: frontend/node_modules/es-abstract/2022/UnicodeEscape.js
===================================================================
--- frontend/node_modules/es-abstract/2022/UnicodeEscape.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/UnicodeEscape.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+var $numberToString = callBound('Number.prototype.toString');
+var $toLowerCase = callBound('String.prototype.toLowerCase');
+
+var StringPad = require('./StringPad');
+
+// https://262.ecma-international.org/11.0/#sec-unicodeescape
+
+module.exports = function UnicodeEscape(C) {
+	if (typeof C !== 'string' || C.length !== 1) {
+		throw new $TypeError('Assertion failed: `C` must be a single code unit');
+	}
+	var n = $charCodeAt(C, 0);
+	if (n > 0xFFFF) {
+		throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF');
+	}
+
+	return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start');
+};
Index: frontend/node_modules/es-abstract/2022/ValidateAndApplyPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ValidateAndApplyPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ValidateAndApplyPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,171 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+var isFullyPopulatedPropertyDescriptor = require('../helpers/isFullyPopulatedPropertyDescriptor');
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+
+// https://262.ecma-international.org/13.0/#sec-validateandapplypropertydescriptor
+
+// see https://github.com/tc39/ecma262/pull/2468 for ES2022 changes
+
+// eslint-disable-next-line max-lines-per-function, max-statements
+module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
+	if (typeof O !== 'undefined' && !isObject(O)) {
+		throw new $TypeError('Assertion failed: O must be undefined or an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	if (typeof extensible !== 'boolean') {
+		throw new $TypeError('Assertion failed: extensible must be a Boolean');
+	}
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+	}
+	if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) {
+		throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
+	}
+
+	if (typeof current === 'undefined') { // step 2
+		if (!extensible) {
+			return false; // step 2.a
+		}
+		if (typeof O === 'undefined') {
+			return true; // step 2.b
+		}
+		if (IsAccessorDescriptor(Desc)) { // step 2.c
+			return DefineOwnProperty(
+				IsDataDescriptor,
+				SameValue,
+				FromPropertyDescriptor,
+				O,
+				P,
+				Desc
+			);
+		}
+		// step 2.d
+		return DefineOwnProperty(
+			IsDataDescriptor,
+			SameValue,
+			FromPropertyDescriptor,
+			O,
+			P,
+			{
+				'[[Configurable]]': !!Desc['[[Configurable]]'],
+				'[[Enumerable]]': !!Desc['[[Enumerable]]'],
+				'[[Value]]': Desc['[[Value]]'],
+				'[[Writable]]': !!Desc['[[Writable]]']
+			}
+		);
+	}
+
+	// 3. Assert: current is a fully populated Property Descriptor.
+	if (
+		!isFullyPopulatedPropertyDescriptor(
+			{
+				IsAccessorDescriptor: IsAccessorDescriptor,
+				IsDataDescriptor: IsDataDescriptor
+			},
+			current
+		)
+	) {
+		throw new $TypeError('`current`, when present, must be a fully populated and valid Property Descriptor');
+	}
+
+	// 4. If every field in Desc is absent, return true.
+	// this can't really match the assertion that it's a Property Descriptor in our JS implementation
+
+	// 5. If current.[[Configurable]] is false, then
+	if (!current['[[Configurable]]']) {
+		if ('[[Configurable]]' in Desc && Desc['[[Configurable]]']) {
+			// step 5.a
+			return false;
+		}
+		if ('[[Enumerable]]' in Desc && !SameValue(Desc['[[Enumerable]]'], current['[[Enumerable]]'])) {
+			// step 5.b
+			return false;
+		}
+		if (!IsGenericDescriptor(Desc) && !SameValue(IsAccessorDescriptor(Desc), IsAccessorDescriptor(current))) {
+			// step 5.c
+			return false;
+		}
+		if (IsAccessorDescriptor(current)) { // step 5.d
+			if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
+				return false;
+			}
+			if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
+				return false;
+			}
+		} else if (!current['[[Writable]]']) { // step 5.e
+			if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
+				return false;
+			}
+			if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
+				return false;
+			}
+		}
+	}
+
+	// 6. If O is not undefined, then
+	if (typeof O !== 'undefined') {
+		var configurable;
+		var enumerable;
+		if (IsDataDescriptor(current) && IsAccessorDescriptor(Desc)) { // step 6.a
+			configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]'];
+			enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]'];
+			// Replace the property named P of object O with an accessor property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value.
+			return DefineOwnProperty(
+				IsDataDescriptor,
+				SameValue,
+				FromPropertyDescriptor,
+				O,
+				P,
+				{
+					'[[Configurable]]': !!configurable,
+					'[[Enumerable]]': !!enumerable,
+					'[[Get]]': ('[[Get]]' in Desc ? Desc : current)['[[Get]]'],
+					'[[Set]]': ('[[Set]]' in Desc ? Desc : current)['[[Set]]']
+				}
+			);
+		} else if (IsAccessorDescriptor(current) && IsDataDescriptor(Desc)) {
+			configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]'];
+			enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]'];
+			// i. Replace the property named P of object O with a data property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value.
+			return DefineOwnProperty(
+				IsDataDescriptor,
+				SameValue,
+				FromPropertyDescriptor,
+				O,
+				P,
+				{
+					'[[Configurable]]': !!configurable,
+					'[[Enumerable]]': !!enumerable,
+					'[[Value]]': ('[[Value]]' in Desc ? Desc : current)['[[Value]]'],
+					'[[Writable]]': !!('[[Writable]]' in Desc ? Desc : current)['[[Writable]]']
+				}
+			);
+		}
+
+		// For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field.
+		return DefineOwnProperty(
+			IsDataDescriptor,
+			SameValue,
+			FromPropertyDescriptor,
+			O,
+			P,
+			Desc
+		);
+	}
+
+	return true; // step 7
+};
Index: frontend/node_modules/es-abstract/2022/ValidateAtomicAccess.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ValidateAtomicAccess.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ValidateAtomicAccess.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+'use strict';
+
+var $RangeError = require('es-errors/range');
+var $TypeError = require('es-errors/type');
+
+var ToIndex = require('./ToIndex');
+var TypedArrayElementSize = require('./TypedArrayElementSize');
+
+var isTypedArray = require('is-typed-array');
+var typedArrayByteOffset = require('typed-array-byte-offset');
+var typedArrayLength = require('typed-array-length');
+
+// https://262.ecma-international.org/13.0/#sec-validateatomicaccess
+
+module.exports = function ValidateAtomicAccess(typedArray, requestIndex) {
+	if (!isTypedArray(typedArray)) {
+		throw new $TypeError('Assertion failed: `typedArray` must be a TypedArray');
+	}
+
+	var length = typedArrayLength(typedArray); // step 1
+
+	var accessIndex = ToIndex(requestIndex); // step 2
+
+	/*
+	// this assertion can never be reached
+	if (!(accessIndex >= 0)) {
+		throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4
+	}
+	*/
+
+	if (accessIndex >= length) {
+		throw new $RangeError('index out of range'); // step 4
+	}
+
+	var elementSize = TypedArrayElementSize(typedArray); // step 5
+
+	var offset = typedArrayByteOffset(typedArray); // step 6
+
+	return (accessIndex * elementSize) + offset; // step 7
+};
Index: frontend/node_modules/es-abstract/2022/ValidateIntegerTypedArray.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ValidateIntegerTypedArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ValidateIntegerTypedArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsBigIntElementType = require('./IsBigIntElementType');
+var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType');
+var TypedArrayElementType = require('./TypedArrayElementType');
+var ValidateTypedArray = require('./ValidateTypedArray');
+
+var whichTypedArray = require('which-typed-array');
+var typedArrayBuffer = require('typed-array-buffer');
+
+// https://262.ecma-international.org/13.0/#sec-validateintegertypedarray
+
+module.exports = function ValidateIntegerTypedArray(typedArray) {
+	var waitable = arguments.length > 1 ? arguments[1] : false; // step 1
+
+	if (typeof waitable !== 'boolean') {
+		throw new $TypeError('Assertion failed: `waitable` must be a Boolean');
+	}
+
+	ValidateTypedArray(typedArray); // step 2
+	var buffer = typedArrayBuffer(typedArray); // step 3
+
+	if (waitable) { // step 5
+		var typeName = whichTypedArray(typedArray);
+		if (typeName !== 'Int32Array' && typeName !== 'BigInt64Array') {
+			throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a
+		}
+	} else {
+		var type = TypedArrayElementType(typedArray); // step 5.a
+		if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) {
+			throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 5.b
+		}
+	}
+
+	return buffer; // step 6
+};
Index: frontend/node_modules/es-abstract/2022/ValidateTypedArray.js
===================================================================
--- frontend/node_modules/es-abstract/2022/ValidateTypedArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/ValidateTypedArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+
+var isTypedArray = require('is-typed-array');
+var typedArrayBuffer = require('typed-array-buffer');
+
+// https://262.ecma-international.org/13.0/#sec-validatetypedarray
+
+module.exports = function ValidateTypedArray(O) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1
+	}
+	if (!isTypedArray(O)) {
+		throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 1 - 2
+	}
+
+	var buffer = typedArrayBuffer(O); // step 3
+
+	if (IsDetachedBuffer(buffer)) {
+		throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 4
+	}
+};
Index: frontend/node_modules/es-abstract/2022/WeakRefDeref.js
===================================================================
--- frontend/node_modules/es-abstract/2022/WeakRefDeref.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/WeakRefDeref.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+var $deref = callBound('WeakRef.prototype.deref', true);
+
+var isWeakRef = require('is-weakref');
+
+var AddToKeptObjects = require('./AddToKeptObjects');
+
+// https://262.ecma-international.org/12.0/#sec-weakrefderef
+
+module.exports = function WeakRefDeref(weakRef) {
+	if (!isWeakRef(weakRef)) {
+		throw new $TypeError('Assertion failed: `weakRef` must be a WeakRef');
+	}
+	var target = $deref(weakRef);
+	if (target) {
+		AddToKeptObjects(target);
+	}
+	return target;
+};
Index: frontend/node_modules/es-abstract/2022/WeekDay.js
===================================================================
--- frontend/node_modules/es-abstract/2022/WeekDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/WeekDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var Day = require('./Day');
+var modulo = require('./modulo');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+	return modulo(Day(t) + 4, 7);
+};
Index: frontend/node_modules/es-abstract/2022/WordCharacters.js
===================================================================
--- frontend/node_modules/es-abstract/2022/WordCharacters.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/WordCharacters.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,46 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+var $indexOf = callBound('String.prototype.indexOf');
+
+var Canonicalize = require('./Canonicalize');
+
+var caseFolding = require('../helpers/caseFolding.json');
+var forEach = require('../helpers/forEach');
+var OwnPropertyKeys = require('own-keys');
+
+var A = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1
+
+// https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation
+
+module.exports = function WordCharacters(IgnoreCase, Unicode) {
+	if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') {
+		throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans');
+	}
+
+	var U = '';
+	forEach(OwnPropertyKeys(caseFolding.C), function (c) {
+		if (
+			$indexOf(A, c) === -1 // c not in A
+			&& $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A
+		) {
+			U += caseFolding.C[c]; // step 3
+		}
+	});
+	forEach(OwnPropertyKeys(caseFolding.S), function (c) {
+		if (
+			$indexOf(A, c) === -1 // c not in A
+			&& $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A
+		) {
+			U += caseFolding.S[c]; // step 3
+		}
+	});
+
+	if ((!Unicode || !IgnoreCase) && U.length > 0) {
+		throw new $TypeError('Assertion failed: `U` must be empty when `IgnoreCase` and `Unicode` are not both true'); // step 4
+	}
+
+	return A + U; // step 5, 6
+};
Index: frontend/node_modules/es-abstract/2022/YearFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2022/YearFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/YearFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('call-bound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+	// largest y such that this.TimeFromYear(y) <= t
+	return $getUTCFullYear(new $Date(t));
+};
Index: frontend/node_modules/es-abstract/2022/abs.js
===================================================================
--- frontend/node_modules/es-abstract/2022/abs.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/abs.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var $abs = require('math-intrinsics/abs');
+
+// https://262.ecma-international.org/11.0/#eqn-abs
+
+module.exports = function abs(x) {
+	return typeof x === 'bigint' ? (x >= 0 ? x : -x) : $abs(x);
+};
Index: frontend/node_modules/es-abstract/2022/clamp.js
===================================================================
--- frontend/node_modules/es-abstract/2022/clamp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/clamp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var max = require('math-intrinsics/max');
+var min = require('math-intrinsics/min');
+
+// https://262.ecma-international.org/12.0/#clamping
+
+module.exports = function clamp(x, lower, upper) {
+	if (typeof x !== 'number' || typeof lower !== 'number' || typeof upper !== 'number' || !(lower <= upper)) {
+		throw new $TypeError('Assertion failed: all three arguments must be MVs, and `lower` must be `<= upper`');
+	}
+	return min(max(lower, x), upper);
+};
Index: frontend/node_modules/es-abstract/2022/floor.js
===================================================================
--- frontend/node_modules/es-abstract/2022/floor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/floor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+// var modulo = require('./modulo');
+var $floor = require('math-intrinsics/floor');
+
+// http://262.ecma-international.org/11.0/#eqn-floor
+
+module.exports = function floor(x) {
+	// return x - modulo(x, 1);
+	if (typeof x === 'bigint') {
+		return x;
+	}
+	return $floor(x);
+};
Index: frontend/node_modules/es-abstract/2022/max.js
===================================================================
--- frontend/node_modules/es-abstract/2022/max.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/max.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#sec-algorithm-conventions
+
+module.exports = require('math-intrinsics/max');
Index: frontend/node_modules/es-abstract/2022/min.js
===================================================================
--- frontend/node_modules/es-abstract/2022/min.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/min.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#sec-algorithm-conventions
+
+module.exports = require('math-intrinsics/min');
Index: frontend/node_modules/es-abstract/2022/modulo.js
===================================================================
--- frontend/node_modules/es-abstract/2022/modulo.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/modulo.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://262.ecma-international.org/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+	return mod(x, y);
+};
Index: frontend/node_modules/es-abstract/2022/msFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2022/msFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/msFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+	return modulo(t, msPerSecond);
+};
Index: frontend/node_modules/es-abstract/2022/substring.js
===================================================================
--- frontend/node_modules/es-abstract/2022/substring.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/substring.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var callBound = require('call-bound');
+
+var $slice = callBound('String.prototype.slice');
+
+// https://262.ecma-international.org/12.0/#substring
+module.exports = function substring(S, inclusiveStart, exclusiveEnd) {
+	if (typeof S !== 'string' || !isInteger(inclusiveStart) || (arguments.length > 2 && !isInteger(exclusiveEnd))) {
+		throw new $TypeError('`S` must be a String, and `inclusiveStart` and `exclusiveEnd` must be integers');
+	}
+	return $slice(S, inclusiveStart, arguments.length > 2 ? exclusiveEnd : S.length);
+};
Index: frontend/node_modules/es-abstract/2022/tables/typed-array-objects.js
===================================================================
--- frontend/node_modules/es-abstract/2022/tables/typed-array-objects.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/tables/typed-array-objects.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+'use strict';
+
+// https://262.ecma-international.org/11.0/#table-the-typedarray-constructors
+
+module.exports = {
+	__proto__: null,
+	name: {
+		__proto__: null,
+		$Int8Array: 'Int8',
+		$Uint8Array: 'Uint8',
+		$Uint8ClampedArray: 'Uint8C',
+		$Int16Array: 'Int16',
+		$Uint16Array: 'Uint16',
+		$Int32Array: 'Int32',
+		$Uint32Array: 'Uint32',
+		$BigInt64Array: 'BigInt64',
+		$BigUint64Array: 'BigUint64',
+		$Float32Array: 'Float32',
+		$Float64Array: 'Float64'
+	},
+	size: {
+		__proto__: null,
+		$Int8: 1,
+		$Uint8: 1,
+		$Uint8C: 1,
+		$Int16: 2,
+		$Uint16: 2,
+		$Int32: 4,
+		$Uint32: 4,
+		$BigInt64: 8,
+		$BigUint64: 8,
+		$Float32: 4,
+		$Float64: 8
+	},
+	choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "BigInt64", "BigUint64", "Float32", or "Float64"'
+};
Index: frontend/node_modules/es-abstract/2022/thisBigIntValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/thisBigIntValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/thisBigIntValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $SyntaxError = require('es-errors/syntax');
+var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true);
+
+// https://262.ecma-international.org/11.0/#sec-thisbigintvalue
+
+module.exports = function thisBigIntValue(value) {
+	if (typeof value === 'bigint') {
+		return value;
+	}
+	if (!$bigIntValueOf) {
+		throw new $SyntaxError('BigInt is not supported');
+	}
+	return $bigIntValueOf(value);
+};
Index: frontend/node_modules/es-abstract/2022/thisBooleanValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/thisBooleanValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/thisBooleanValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf');
+
+// https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object
+
+module.exports = function thisBooleanValue(value) {
+	if (typeof value === 'boolean') {
+		return value;
+	}
+
+	return $BooleanValueOf(value);
+};
Index: frontend/node_modules/es-abstract/2022/thisNumberValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/thisNumberValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/thisNumberValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $NumberValueOf = callBound('Number.prototype.valueOf');
+
+// https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object
+
+module.exports = function thisNumberValue(value) {
+	if (typeof value === 'number') {
+		return value;
+	}
+
+	return $NumberValueOf(value);
+};
+
Index: frontend/node_modules/es-abstract/2022/thisStringValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/thisStringValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/thisStringValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $StringValueOf = require('call-bound')('String.prototype.valueOf');
+
+// https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object
+
+module.exports = function thisStringValue(value) {
+	if (typeof value === 'string') {
+		return value;
+	}
+
+	return $StringValueOf(value);
+};
Index: frontend/node_modules/es-abstract/2022/thisSymbolValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/thisSymbolValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/thisSymbolValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var callBound = require('call-bound');
+
+var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true);
+
+// https://262.ecma-international.org/9.0/#sec-thissymbolvalue
+
+module.exports = function thisSymbolValue(value) {
+	if (typeof value === 'symbol') {
+		return value;
+	}
+
+	if (!$SymbolValueOf) {
+		throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object');
+	}
+
+	return $SymbolValueOf(value);
+};
Index: frontend/node_modules/es-abstract/2022/thisTimeValue.js
===================================================================
--- frontend/node_modules/es-abstract/2022/thisTimeValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2022/thisTimeValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var timeValue = require('../helpers/timeValue');
+
+// https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object
+
+module.exports = function thisTimeValue(value) {
+	return timeValue(value);
+};
