_exponentialBackoff(backoffName, minimumTimeout, maximumTimeout) {
		return new Promise((resolve) => {
			let timeout = this._exponentialBackoffs[backoffName]?.lastTimeout ?? 0;
			this._resetExponentialBackoff(backoffName); // cancel any outstanding backoffs of this name

			timeout *= 2;
			timeout = Math.max(timeout, minimumTimeout);
			timeout = Math.min(timeout, maximumTimeout);

			let isImportant = IMPORTANT_BACKOFFS.includes(backoffName);
			this.emit(isImportant ? 'debug' : 'debug-verbose', `[EBO] Queueing exponential backoff "${backoffName}" with timeout ${timeout}`);
			this._exponentialBackoffs[backoffName] = {
				lastTimeout: timeout,
				timeout: setTimeout(resolve, timeout)
			};
		});
	}
@param {string} backoffName
@param {number} minimumTimeout
@param {number} maximumTimeout
@return Promise<void>
@protected